在Python中生成EVEN数字列表

时间:2012-06-27 19:09:54

标签: python numbers fibonacci

基本上我需要帮助从我在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

14 个答案:

答案 0 :(得分:17)

使用列表推导(参见:Searching a list of objects in Python

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

这很好,因为它使列表保持不变,你可以使用evensList作为普通的列表对象。

希望这有帮助!

答案 1 :(得分:4)

以下示例应解决您的问题。

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

答案 2 :(得分: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]

答案 3 :(得分:3)

您可以使用a list comprehension执行此操作:

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

您也可以使用the filter function

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

如果列表很长,可能需要创建一些迭代列表的内容,而不是使用ifilter from itertools创建一半的副本:

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

或者使用generator expression

evens = (n for n in numbers if n % 2 == 0)

答案 4 :(得分:2)

请检查此

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

答案 5 :(得分:1)

遍历列表并使用模运算符来检查

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

答案 6 :(得分: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

生成器表达式的优点是不会一次生成整个列表并将其存储在内存中,但会在您需要时生成值,从而减少对内存的需求。如果您有兴趣,可能会在某些时候阅读其他重要的差异。

答案 7 :(得分: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   

上述技巧之所以有效,是因为对数字==(1)和/或>(0)进行操作的逻辑表达式(TrueFalse等)。 / p>

答案 8 :(得分: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()))

答案 9 :(得分:0)

您可以使用过滤功能执行此操作,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>RestSpringSimpleDemo</display-name>

 <servlet>
        <servlet-name>dispatcher</servlet-name>
            <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

答案 10 :(得分:0)

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

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

答案 11 :(得分: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]

答案 12 :(得分:0)

以下是获取偶数的几种不同方式

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

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

案例2 这是一个函数,您必须传递一个参数来检查它是否为偶数。     def偶数(rangeno):     对于范围内的x(rangeno):         如果rangeno%2 == 0:             返回范围         其他:             返回“没有,甚至没有”

 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)

答案 13 :(得分:-1)

a = range(0,1000)
b = []
for c in a:
    if c%2==0:
        b.append(c)
print b