Skip to main content
 首页 » 编程设计

python之不理解python中的列表理解

2025年05月04日9davidwang456

在做一些列表理解练习时,我不小心做了下面的代码。这最终会为列表中的所有 16 个条目打印 True/False。

threes_and_fives =[x % 3 == 0 or x % 5 == 0 for x in range(16)] 
print threes_and_fives 

在我使用它之后,我能够得到我想要的结果,它打印了该列表中可被 3 或 5 整除的数字。

threes_and_fives =[x for x in range(16) if x % 3 == 0 or x % 5 == 0] 
print threes_and_fives 

我的问题是为什么第一个代码评估为真或假而另一个没有?我正在尝试掌握 python,所以解释越多越好 :) 谢谢!

请您参考如下方法:

您可能忽略了 Python 中的关系运算符并没有什么特别之处,它们和其他运算符一样都是表达式,只是碰巧产生 bool 值。举几个例子:

>>> 1 + 1 == 2 
True 
>>> 2 + 2 == 5 
False 
>>> [1 + 1 == 2, 2 + 2 == 5] 
[True, False] 

列表理解只是将涉及可迭代序列元素的表达式收集到列表中:

>>> [x for x in xrange(5)]      # numbers 0 through 4 
[0, 1, 2, 3, 4] 
>>> [x**2 for x in xrange(5)]   # squares of 0 through 4 
[0, 1, 4, 9, 16] 

您的第一个表达式就像那样工作,但是表达式会生成 bool 值:它告诉 Python 组装一个 bool 值列表,这些值对应于匹配的序数是否可以被 3 或 5 整除。

您真正想要的是一个按指定条件过滤的数字列表。 Python 列表理解通过可选的 if 子句支持这一点,该子句采用表达式并将结果列表限制为 bool 表达式返回真值的那些项目。这就是为什么您的第二个表达式可以正常工作的原因。