python list comprehension(if,continue,break)

时间:2015-04-20 19:23:20

标签: python python-3.x list-comprehension

我试图让它成为创建列表推导的习惯,并基本优化我编写的任何代码。 我做了这个小练习来查找给定数字中的所有数字是否均匀,当尝试创建带有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)

3 个答案:

答案 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)])