python list comprehension(if,continue,break)

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)

Pad*_*ham 7

您可以使用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)


Tig*_*kT3 5

[x for x in range(10000) if all(c in '02468' for c in str(x))]
Run Code Online (Sandbox Code Playgroud)