在做一些列表理解练习时,我不小心做了下面的代码.这最终打印列表中所有16个条目的True/False.
threes_and_fives =[x % 3 == 0 or x % 5 == 0 for x in range(16)]
print threes_and_fives
Run Code Online (Sandbox Code Playgroud)
在我玩之后,我能够得到我想要的结果,它打印了该列表中可以被3或5整除的数字.
threes_and_fives =[x for x in range(16) if x % 3 == 0 or x % 5 == 0]
print threes_and_fives
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么第一个代码被评估为真或假而另一个没有?我正在努力掌握python所以更多的解释更好:)谢谢!
您可能缺少的是Python中的关系运算符没有什么特别之处,它们就像任何其他表达式一样,恰好产生布尔值.举一些例子:
>>> 1 + 1 == 2
True
>>> 2 + 2 == 5
False
>>> [1 + 1 == 2, 2 + 2 == 5]
[True, False]
Run Code Online (Sandbox Code Playgroud)
列表推导只是将涉及可迭代序列元素的表达式收集到列表中:
>>> [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]
Run Code Online (Sandbox Code Playgroud)
你的第一个表达式就是这样,但是使用表达式生成布尔值:它告诉Python汇编一个布尔值列表,对应于匹配的序号是否可以被3或5整除.
你真正想要的是一个数字列表,按指定条件过滤.Python列表推导通过一个可选if子句支持这一点,该子句接受一个表达式并将结果列表限制为布尔表达式返回true值的那些项.这就是你的第二个表达式正常工作的原因
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |