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)

如果列表很长,可能需要创建一些东西来迭代列表,而不是使用ifilterfromitertools创建其中一半的副本:

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]将起作用。斐波那契的偶数之间总有两个奇数:偶数、奇数、奇数、偶数、奇数、奇数......

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

与其生成所有斐波那契数然后过滤偶数,为什么不只生成偶数呢?

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

您可以使用列表推导生成一个新列表,其中仅包含原始列表中的偶数成员。

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 ]

请注意,您可以做一些聪明的事情来在一个循环中分离偶数和赔率:

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
a = range(0,1000)
b = []
for c in a:
    if c%2==0:
        b.append(c)
print b
于 2014-07-31T09:20:55.183 回答
0

以下是获得偶数的一些不同方法

CASE 1 在这种情况下,您必须提供一个范围

lst = []
for x in range(100):
    if x%2==0:
    lst.append(x)
print(lst)

CASE 2 这是一个函数,你必须传递一个参数来检查它是否是偶数 no 或不是 def even(rangeno): for x in range(rangeno): if rangeno%2 == 0: return rangeno else: return '没有甚至没有'

 even(2)

案例 3 检查 100 范围内的值以通过具有列表理解的函数获得偶数

def even(no):
return [x for x in range(no) if x%2==0]

even(100)

案例4 这个案例检查列表中的值并通过lambda函数打印偶数。而这个案例就适合上面的问题

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)
于 2019-09-25T12:55:03.557 回答
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]

于 2019-01-30T20:16:06.793 回答
0

您可以使用 filter 函数执行此操作,如下所示:

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)
于 2018-02-09T06:50:08.610 回答
0

您可以使用长度函数使用 for 和 if 循环,如下所示:

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