基本上我需要帮助从我在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
答案 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)进行操作的逻辑表达式(True
,False
等)。 / 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