我试图让它成为创建列表推导的习惯,并基本优化我编写的任何代码。 我做了这个小练习来查找给定数字中的所有数字是否均匀,当尝试创建带有for循环的列表时,如果语句我遇到问题"继续" &安培; "中断&#34 ;. 我甚至可以将这些流控制插入列表中吗?
我很想知道我可以缩短任何代码。 这就是我写的内容,我很乐意得到你们的反馈。
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)
答案 0 :(得分:7)
您可以使用列表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'
答案 1 :(得分:5)
[x for x in range(10000) if all(c in '02468' for c in str(x))]
答案 2 :(得分:3)
不是将整个数字列表发送到函数,您只需向函数发送一个数字,然后使用列表推导将其应用到列表中。
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)])