web-dev-qa-db-ja.com

Python)で偶数のリストを生成する

基本的に、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
9
user1486654

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

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

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

お役に立てれば!

18
Erty Seidohl

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

Newlist = []
for x in numList:
   if x % 2 == 0:
      print x          
      Newlist.append(x)
4
8bitwide

あなたの特定のケースでは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]
3
Akavall

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

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)
3
Dave Webb

これをチェックしてください

A = [i for i in range(101)]
B = [x for x in A if x%2 == 0]
print B
2
Ankit Vyas

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

for number in list:
    if (number % 2) == 0: 
        ##EVEN
1
javajavajava

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

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()))
0
Hugh Bothwell

次のようにフィルター関数を使用してこれを行うことができます。

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)
0

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

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

0
Levon

楽しみのために、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)で動作します。

0
mgilson

基本的には、変数を作成してリストを配置し、偶数のみを追加して偶数リストを並べ替える必要があります。

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]

0
gxet4n

次のように、length関数を使用してforループとifループを使用できます。

for x in range(len(numList)):
    if x%2 == 0:
        print(x)
        NewList.append(x)
0
Adeesh Jain

偶数を取得するさまざまな方法

ケース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)
0
Jahanzeb Nawaz