首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python列表理解(if、continue、break)

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

Stack Overflow用户
提问于 2015-04-21 03:23:20
回答 3查看 10.7K关注 0票数 6

我正在努力养成创建列表理解的习惯,并从根本上优化我编写的任何代码。当我试图用for循环创建一个列表时,我做了这个小练习,以确定给定数字中的所有数字是否都是偶数,并且if语句在"continue“和"break”中遇到了问题。我甚至可以将这些流控制插入到列表中吗?

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

代码语言:javascript
复制
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)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-21 03:30:06

您可以使用list comp,使用all查找所有包含偶数位的数字:

代码语言:javascript
复制
print([s for s in numbers if all(not int(ch) % 2 for ch in s)])

all将在发现任何奇数位时短路。

如果你不想一次在内存中存储所有的数字,你可以使用generator expression

代码语言:javascript
复制
evens = (s for s in numbers if all(not int(ch) % 2 for ch in s))

要访问这些数字,您只需遍历evens:

代码语言:javascript
复制
for n in evens:
    print(n)

您还可以使用filter作为函数方法,它返回python 3中的迭代器:

代码语言:javascript
复制
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'
票数 10
EN

Stack Overflow用户

发布于 2015-04-21 03:31:17

代码语言:javascript
复制
[x for x in range(10000) if all(c in '02468' for c in str(x))]
票数 5
EN

Stack Overflow用户

发布于 2015-04-21 03:33:24

您可以只向函数发送一个数字,然后使用列表理解将其应用于您的列表,而不是将整个数字列表发送到函数。

代码语言:javascript
复制
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)])
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29756603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档