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)
您可以使用list comp,使用all来查找包含所有偶数的数字:
print([s for s in numbers if all(not int(ch) % 2 for ch in s)])
all 找到任何奇数位都会短路.
如果您不想一次将所有数字存储在内存中,则可以使用生成器表达式:
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'
[x for x in range(10000) if all(c in '02468' for c in str(x))]