Ale*_*Zel 4 python list-comprehension python-3.x
我试图让它成为创建列表推导的习惯,并基本优化我编写的任何代码.我做了这个小练习来查找给定数字中的所有数字是否均匀,当尝试创建带有for循环的列表时,如果语句我遇到了"继续"和"中断"的问题.我甚至可以将这些流量控件插入列表中吗?
我很想知道我可以缩短任何代码.这是我写的,我很乐意得到你们的反馈.
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)
Run Code Online (Sandbox Code Playgroud)
您可以使用list comp,使用all来查找包含所有偶数的数字:
print([s for s in numbers if all(not int(ch) % 2 for ch in s)])
Run Code Online (Sandbox Code Playgroud)
all 找到任何奇数位都会短路.
如果您不想一次将所有数字存储在内存中,则可以使用生成器表达式:
evens = (s for s in numbers if all(not int(ch) % 2 for ch in s))
Run Code Online (Sandbox Code Playgroud)
要访问数字,您只需要在evens上迭代:
for n in evens:
print(n)
Run Code Online (Sandbox Code Playgroud)
你也可以使用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'
Run Code Online (Sandbox Code Playgroud)
[x for x in range(10000) if all(c in '02468' for c in str(x))]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5508 次 |
| 最近记录: |