python列表理解(if、continue、break)

2024-03-28 09:10:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着让它成为创建列表理解的习惯,并基本上优化我编写的任何代码。 我做了一个小练习,以确定给定数字中的所有数字是否均为偶数,在尝试创建包含for循环的列表时,如果语句遇到“continue”&;“break”问题。 我甚至可以将这些流控件插入到列表中吗?

我很想知道我能缩短多少代码。 这是我写的,我很想得到你们的反馈。

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)

Tags: 代码in列表forlenif数字temp
3条回答
[x for x in range(10000) if all(c in '02468' for c in str(x))]

不必向函数发送整个数字列表,只需向函数发送一个数字,然后使用列表理解将其应用于列表。

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

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

要访问数字,您只需在晚上重复:

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'

相关问题 更多 >