10

基本的に、Python で作成したリストから偶数を生成するには助けが必要です。

[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, ...]

いくつかの異なる方法を試しましたが、印刷するたびに奇数と偶数が混在しています!

0 から 100 の範囲で偶数/奇数を生成する方法は知っていますが、前述のリストから偶数のみを取得すると困惑します。

PS私はPythonを数日間しか使用していません。これが非常に単純であることが判明した場合は、事前に感謝します!

編集:すべての返信をありがとう、あなたの助けを借りて、この小さな問題を乗り越えました. これは、フィボナッチ数列の偶数を合計するように求める小さな演習を完了するために私が最終的に得たものです。

F = [1, 2]
while F[-1] < 4000000
    F.append(F[-1] + F[-2])

sum(F[1::3])
4613732
4

14 に答える 14

24

リスト内包表記を使用します(Pythonでのオブジェクトのリストの検索を参照) 。

myList = [<your list>]
evensList = [x for x in myList if x % 2 == 0]

これは、リストをそのまま残し、evensListを通常のリストオブジェクトとして使用できるため、優れています。

お役に立てれば!

于 2012-06-27T19:14:46.310 に答える
5

次のサンプルで問題が解決するはずです。

Newlist = []
for x in numList:
   if x % 2 == 0:
      print x          
      Newlist.append(x)
于 2012-06-27T19:12:29.533 に答える
4

リスト内包表記でこれを行うことができます:

evens = [n for n in numbers if n % 2 == 0]

機能を使用するfilterこともできます。

evens = filter(lambda x: x % 2 == 0,numbers)

ifilterリストが非常に長い場合、 fromitertoolsを使用してリストの半分のコピーを作成するのではなく、リストを反復処理する何かを作成することが望ましい場合があります。

from itertools import ifilter
evens = ifilter(lambda x: x % 2 == 0,numbers)

または、ジェネレータ式を使用して:

evens = (n for n in numbers if n % 2 == 0)
于 2012-06-27T19:17:59.990 に答える
3

あなたの特定のケースでmy_list[1::3]はうまくいくでしょう。フィボナッチの偶数の整数の間には常に2つの奇数の整数があります:偶数、奇数、奇数、偶数、奇数、奇数....。

>>> my_list = [1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368]
>>>         
... 
>>> my_list[1::3]
[2, 8, 34, 144, 610, 2584, 10946, 46368]
于 2012-06-27T19:15:53.900 に答える
2

これだけチェック

A = [i for i in range(101)]
B = [x for x in A if x%2 == 0]
print B
于 2014-03-24T07:30:51.047 に答える
1

リストを反復処理し、モジュロ演算子を使用して偶数をチェックします

for number in list:
    if (number % 2) == 0: 
        ##EVEN
于 2012-06-27T19:12:46.933 に答える
0

リスト内包表記を使用して、元のリストの偶数メンバーのみを含む新しいリストを生成できます。

data = [1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]

それから:

new_data = [i for i in data if not i%2]

収量

[2, 8, 34, 144]

または、一度にすべての数値が必要でない場合は、ジェネレータ式を使用します。

new_data = (i for i in data if not i%2)

たとえば、forループを使用した場合、値は必要に応じて利用できます。

例えば、

for val in new_data:
   print val

ジェネレータ式の利点は、リスト全体が一度に生成されてメモリに格納されるのではなく、必要に応じて値が生成されるため、メモリへの要求が少なくなることです。興味があれば、ある時点で読みたいと思うかもしれない他の重要な違いがあります。

于 2012-06-27T19:16:19.053 に答える
0

楽しみのために、number%2 != 1機能するかどうかを確認してください;)

evens=[x for x in evens_and_odds if number%2 != 1 ]

1 つのループで偶数と奇数を分離するために、いくつかの巧妙なことを行うことができることに注意してください。

evens=[]
odds=[]
numbers=[ evens, odds ]
for x in evens_and_odds:
    numbers[x%2 == 1].append(x)

print evens
print odds   

上記のトリックは、論理式 ( ==>など) が数値 True(1) および/またはFalse(0) で動作するために機能します。

于 2012-06-27T19:18:52.260 に答える
0

すべてのフィボナッチ数を生成してから偶数をフィルタリングする代わりに、偶数の値だけを生成してみませんか?

def even_fibs():
    a,b = 1,2
    while True:
        yield b
        a,b = a+2*b, 2*a+3*b

[2, 8, 34, 144, 610, 2584, 10946 ...] を生成します

次に、合計コードは次のようになります。

total = 0
for f in even_fibs():
    if f >= 4000000:
        break
    else:
        total += f

また

from itertools import takewhile
total = sum(takewhile(lambda n: n<4000000, even_fibs()))
于 2012-06-28T02:01:40.843 に答える
0

次のように、長さ関数を使用して for および if ループを使用できます。

for x in range(len(numList)):
    if x%2 == 0:
        print(x)
        NewList.append(x)
于 2018-12-27T20:21:09.447 に答える