Pythonでリストをループする


177

サブリストを含むリストがあります。長さが3のすべてのサブリストを印刷したい。

私はPythonで次のことをしています:

for x in values[:]:
    if len(x) == 3:
        print(x)

values元のリストです。上記のコードは、各値に対して長さが3のすべてのサブリストを印刷しxますか?サブリストをlength == 3一度だけ表示したい。

問題は解決しました。問題はEclipseエディターにあります。理由はわかりませんが、ループを実行するとリストの半分しか表示されません。

Eclipseで変更する必要がある設定はありますか?


1
print valuesここで出力を実行して表示できますか? 編集:または、それが空白でないことを確認してください。
ブリガンド2012

回答:


196

これを試して、

x in mylistよりも読みやすく、読みやすく、x in mylist[:]len(x)等しい必要があります3

>>> mylist = [[1,2,3],[4,5,6,7],[8,9,10]]
>>> for x in mylist:
...      if len(x)==3:
...        print x
...
[1, 2, 3]
[8, 9, 10]

または、より多くのpythonicが必要な場合はlist-comprehensionsを使用してください

>>> [x for x in mylist if len(x)==3]
[[1, 2, 3], [8, 9, 10]]
>>>

15

for x in valuesではなく使用することもできfor x in values[:]ます。後者は不要なコピーを作成します。また、もちろん、そのコードは3ではなく2の長さをチェックします...

コードはx-の値ごとに1つの項目のみを出力xし、の要素(valuesサブリスト)を繰り返し処理します。したがって、各サブリストを一度だけ印刷します。


4
values [:]は、値のすべての要素を切り出しますよね?私はあなたがスライスから作成された一時的なリストを意味していると思います。確認したいだけです。
batbrat

1
不要なコピーについて言及していただきありがとうございます。@batbratそれは切り取られません、それは切り取られます、つまり私が意味することは、値が重複していて、まだ残っているということvaluesです。
AsTeR

明確にしていただきありがとうございます。
Batbrat

14

これが私が探していた解決策です。List1の要素数の違いを含むList2を作成する場合。

list1 = [12, 15, 22, 54, 21, 68, 9, 73, 81, 34, 45]
list2 = []
for i in range(1, len(list1)):
  change = list1[i] - list1[i-1]
  list2.append(change)

len(list1)は11(要素)ですlen(list2)が、リスト1のインデックス0の要素からではなく、リスト1のインデックス1の要素からforループを開始しているため、10要素のみになることに注意してください。


これは、0ではなくインデックス1から開始するために必要なものでした。+1
timv

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.