我正在努力养成创建列表理解的习惯,并从根本上优化我编写的任何代码。当我试图用for循环创建一个列表时,我做了这个小练习,以确定给定数字中的所有数字是否都是偶数,并且if语句在"continue“和"break”中遇到了问题。我甚至可以将这些流控制插入到列表中吗?
我很想知道我能缩短多少代码。这是我写的,我很想从你们那里得到反馈。
numbers = [str(x) for x in range(0, 10000)]
def is_all_even(nums):
temp_lst = []
evens_lst = []
for x in nums:
for y in x:
if int(y) % 2 == 0:
temp_lst.append(str(y))
continue
else:
break
if len(''.join(temp_lst[:])) == len(x):
evens_lst.append(''.join(temp_lst[:]))
del temp_lst[:]
print(evens_lst)发布于 2015-04-21 03:30:06
您可以使用list comp,使用all查找所有包含偶数位的数字:
print([s for s in numbers if all(not int(ch) % 2 for ch in s)])all将在发现任何奇数位时短路。
如果你不想一次在内存中存储所有的数字,你可以使用generator expression
evens = (s for s in numbers if all(not int(ch) % 2 for ch in s))要访问这些数字,您只需遍历evens:
for n in evens:
print(n)您还可以使用filter作为函数方法,它返回python 3中的迭代器:
In [5]: evens = filter(lambda x: all(not int(ch) % 2 for ch in x), numbers)
In [6]: next(evens)
Out[6]: '0'
In [7]: next(evens)
Out[7]: '2'
In [8]: next(evens)
Out[8]: '4'
In [9]: next(evens)
Out[9]: '6'发布于 2015-04-21 03:31:17
[x for x in range(10000) if all(c in '02468' for c in str(x))]发布于 2015-04-21 03:33:24
您可以只向函数发送一个数字,然后使用列表理解将其应用于您的列表,而不是将整个数字列表发送到函数。
def is_all_even(num):
return all(ch in '02468' for ch in str(num))
print([n for n in range(10000) if is_all_even(n)])https://stackoverflow.com/questions/29756603
复制相似问题