if / else在Python的列表中的理解?

我如何在Python中执行以下操作?

row = [unicode(x.strip()) for x in row if x is not None else ''] 

主要有:

  1. 用空stringreplace所有的Nones,然后
  2. 执行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评估False0并为所有由函数range()生成的其他值True 。 因此,列表理解评估如下:

 >>> ["ha" if i else "Ha" for i in range(3)] ['Ha', 'ha', 'ha']