0

私はPythonを学んでいて、forループの条件に苦労しています。私は単純なものが欠けているに違いありません。いくつかの int 値を含むリストがあり、(1) すべての偶数を出力し、(2) 特定のインデックスまでの値のみを出力したいと考えています。偶数は問題なく印刷できますが、特定のインデックスだけを印刷できないようです。

numbers = [951, 402, 984, 651, 360, 69, 408, 319, 601, 485, 980, 507, 725, 547, 544, 615, 83, 165, 141, 501, 263, 617, 865, 575, 219, 390, 984, 592, 236, 105, 942, 941, 386, 462, 47, 418, 907, 344, 236, 375, 823, 566, 597, 978, 328, 615, 953, 345]
  1. リスト内のすべての数値を出力します -- わかりました:

    for i in numbers:
        print i
    
  2. リスト内のすべての偶数を出力します -- ok:

    for i in numbers:
        if i % 2 == 0:
            print i
    

値が 980 のエントリまでの偶数のみを出力したいとします。つまり、402、984、360、408、980 になります。

count と while ループを実装しようとしましたが、失敗しましたnumbers[n] < numbers.index(980)

4

5 に答える 5

3

enumerate()関数を使用してループ インデックスを含めます。

for i, num in enumerate(numbers):
    if num % 2 == 0 and i < 10:
        print num

または、リストをスライスして最初のn要素のみを考慮しますが、サブリストの新しいコピーが作成されます。

for num in numbers[:10]:
    if num % 2 == 0:
        print num

の特定の値をテストする必要がある場合は、ループを早期にnum終了することもできます。forbreak

for i, num in enumerate(numbers):
    if num % 2 == 0:
        print num
    if num == 980 or i >= 10:
        break  # exits the loop early
于 2013-07-19T12:12:16.257 に答える
3

現在のループを終了するbreakステートメントがあります。

>>> for i in numbers:
...     if i % 2 == 0:
...         print i
...     if i == 980:
...         break
... 
402
984
360
408
980
于 2013-07-19T12:14:47.863 に答える
0

itertoolsは、多くの素晴らしい機能を備えたモジュールです。

from itertools import takewhile

numbers = [951, 402, 984, 651, 360, 69, 408, 319, 601, 485, 980, 507, 725, 547, 544, 615, 83, 165, 141, 501, 263, 617, 865, 575, 219, 390, 984, 592, 236, 105, 942, 941, 386, 462, 47, 418, 907, 344, 236, 375, 823, 566, 597, 978, 328, 615, 953, 345]

for number in (number for number in takewhile(lambda x: x != 980, numbers) if number % 2 == 0):
    print(number)

itertools 関数をさらに追加するには:

from itertools import ifilterfalse, takewhile
for number in ifilterfalse(lambda x: x % 2, takewhile(lambda x: x != 980, numbers)):
    print(number)
于 2013-07-19T12:55:01.997 に答える