if / else在Python的列表中的理解?
我如何在Python中执行以下操作?
row = [unicode(x.strip()) for x in row if x is not None else '']
主要有:
- 用空stringreplace所有的Nones,然后
- 执行function。
你完全可以这样做,这只是一个订购问题:
[ unicode(x.strip()) if x is not None else '' for x in row ]
请注意,这实际上使用了不同的语言结构,一个条件expression式 ,它本身不是理解语法的一部分,而if
之后的if
是列表推导的一部分,用于过滤来自源迭代的元素。
条件expression式可以用于任何你想根据条件在两个expression式值之间进行select的情况。 这与三元操作符?:
相同?:
存在于其他语言中 。 例如:
value = 123 print(value, 'is', 'even' if value % 2 == 0 else 'odd')
单程:
def change(f): if f is None: return unicode(f.strip()) else: return '' row = [change(x) for x in row]
虽然那么你有:
row = map(change, row)
或者你可以使用lambda内联。
这是另一个说明性的例子:
>>> print(", ".join(["ha" if i else "Ha" for i in range(3)]) + "!") Ha, ha, ha!
它利用了这样的事实, if i
评估False
为0
并为所有由函数range()
生成的其他值True
。 因此,列表理解评估如下:
>>> ["ha" if i else "Ha" for i in range(3)] ['Ha', 'ha', 'ha']