基本的に、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の範囲を実行する場合、偶数/奇数を生成する方法を知っていますが、前述のリストから偶数のみを取得すると、困惑します。
P.S.私はpythonを数日間しか使用していません。これが非常に単純であることが判明した場合は、よろしくお願いします。
編集:私がこの小さな問題を乗り越えたあなたの助けを借りて、すべての返信をありがとう。これが、フィボナッチ数列の偶数を合計するように求める少しの演習を完了するために私が最終的に得たものです。
F = [1, 2]
while F[-1] < 4000000
F.append(F[-1] + F[-2])
sum(F[1::3])
4613732
リスト内包表記を使用します(参照: Pythonでオブジェクトのリストを検索する )
myList = [<your list>]
evensList = [x for x in myList if x % 2 == 0]
これは、リストをそのまま残し、evensListを通常のリストオブジェクトとして操作できるため、優れています。
お役に立てれば!
次のサンプルで問題が解決するはずです。
Newlist = []
for x in numList:
if x % 2 == 0:
print x
Newlist.append(x)
あなたの特定のケースでは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]
これは リスト内包表記 で行うことができます:
evens = [n for n in numbers if n % 2 == 0]
filter
関数 を使用することもできます。
evens = filter(lambda x: x % 2 == 0,numbers)
リストが非常に長い場合は、 ifilter
from itertools
を使用して、リストの半分のコピーを作成するのではなく、リストを反復処理するものを作成することが望ましい場合があります。
from itertools import ifilter
evens = ifilter(lambda x: x % 2 == 0,numbers)
または ジェネレータ式 を使用して:
evens = (n for n in numbers if n % 2 == 0)
これをチェックしてください
A = [i for i in range(101)]
B = [x for x in A if x%2 == 0]
print B
リストを反復処理し、モジュロ演算子を使用して偶数をチェックします
for number in list:
if (number % 2) == 0:
##EVEN
すべてのフィボナッチ数を生成してから偶数をフィルタリングする代わりに、偶数値だけを生成してみませんか?
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()))
次のようにフィルター関数を使用してこれを行うことができます。
F = [1, 2]
while F[-1] < 4000000:
F.append(F[-1] + F[-2])
print(F)
print('\n')
#create the variable that could store the sorted values from the list you have created.
sorted_number=list(filter(lambda x:x%2==0,F))
print(sorted_number)
list comprehension を使用して、元のリストの偶数メンバーのみを含む新しいリストを生成できます。
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
ジェネレータ式の利点は、リスト全体が一度に生成されてメモリに格納されるのではなく、必要に応じて値が生成されるため、メモリへの要求が少なくなることです。興味があれば、ある時点で読みたいと思うかもしれない他の重要な違いがあります。
楽しみのために、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)で動作します。
基本的には、変数を作成してリストを配置し、偶数のみを追加して偶数リストを並べ替える必要があります。
numbers = [1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, ...] even = [e for e in numbers if e%2==0]
次のように、length関数を使用してforループとifループを使用できます。
for x in range(len(numList)):
if x%2 == 0:
print(x)
NewList.append(x)
偶数を取得するさまざまな方法:
ケース1この場合、範囲を指定する必要があります
lst = []
for x in range(100):
if x%2==0:
lst.append(x)
print(lst)
ケース2これは関数であり、パラメーターを渡して、それが偶数であるかどうかを確認する必要がありますdefeven(rangeno):for x in range(rangeno):if rangeno%2 == 0:範囲を返すno else: 'No a EvenNo'を返す
even(2)
ケースリスト内包表記を使用して関数を介して偶数を取得するために100の範囲の値をチェックします
def even(no):
return [x for x in range(no) if x%2==0]
even(100)
ケース4このケースでは、リスト内の値をチェックし、ラムダ関数を使用して偶数を出力します。この場合は上記の問題に適しています
lst = [2,3,5,6,7,345,67,4,6,8,9,43,6,78,45,45]
no = list(filter(lambda x: (x % 2 == 0), lst))
print(no)