我正在使用Python2.7。我有一个列表,我想使用for循环来迭代该列表的子集,但要满足某些条件。下面是我想要做的事情的一个例子:
l = [1, 2, 3, 4, 5, 6]
for e in l if e % 2 == 0:
print e在我看来,这是非常整洁和毕达通的,并且在各个方面都很可爱,除了语法错误这一小问题。这一备选办法是:
for e in (e for e in l if e % 2 == 0):
print e但像罪恶一样丑陋。是否有一种方法直接将条件添加到for循环构造中,而不构建生成器?
编辑:您可以假设我实际上想在e上执行的处理和筛选比上面的示例要复杂得多。特别是处理不属于一条线。
发布于 2015-06-26 11:37:38
简单、可读的解决方案有什么问题:
l = [1, 2, 3, 4, 5, 6]
for e in l:
if e % 2 == 0:
print e您可以使用任意数量的语句,而不仅仅是一个简单的print e,没有人需要绞尽脑汁才能弄清楚它是干什么的。
如果您也需要将子列表用于其他事情(而不只是迭代一次),那么为什么不构建一个新列表呢?
l = [1, 2, 3, 4, 5, 6]
even_nums = [num for num in l if num % 2 == 0]现在在even_nums上迭代。再多一行,就更容易读了。
发布于 2015-06-26 11:40:00
使用filter试试这个
for i in filter(lambda x: not x%2, l):
print i或者简单的list comprehension
>>>[i for i in l if not i%2]发布于 2015-06-26 11:37:57
不能让它那样运作。然而,这里还有其他的节奏曲风格:
print [ e for e in l if e%2==0 ]如果您想坚持您的风格,请使用以下列表理解:
for e in [x for x in l if x%2==0]:
print e因此,这里的e迭代由[x for x in l if x%2==0]定义的列表
好吧,你总是可以用香草的方法:
for e in l:
if e % 2 == 0:
print ehttps://stackoverflow.com/questions/31072039
复制相似问题