Python 使用';如果';在列表中
我正在努力 有一些代码对我来说似乎无关,但这家伙似乎比我高出100级,所以更可能是我不理解,而不是他写了一些不必要的东西Python 使用';如果';在列表中,python,list,list-comprehension,Python,List,List Comprehension,我正在努力 有一些代码对我来说似乎无关,但这家伙似乎比我高出100级,所以更可能是我不理解,而不是他写了一些不必要的东西 def lines(text): "A list of the non-empty lines in a text." return [line for line in text.splitlines() if line] #return [zaa for zaa in text.splitlines()] 列表理解——为什么以if行结束 如果我删
def lines(text):
"A list of the non-empty lines in a text."
return [line for line in text.splitlines() if line]
#return [zaa for zaa in text.splitlines()]
列表理解——为什么以if行结束
如果我删除该子句,改用[zaa for zaa in text.splitlines()]
,我仍然认为如果我传递文本,甚至一个空行,该函数仍然可以工作
foo ="""mike\nnew\nbar"""
bar ="\n\n"
print lines(foo)
print lines(bar)
what = lines(bar)
print(type(what))
['mike', 'new', 'bar']
[]
<type 'list'>
它包括这两个空字符串作为列表的成员。如果行
正在检查“truthy”值,则当检查时确定为False
或True
。例如,空字符串'
与空列表([]
)、字典({}
)、元组(()
)、0
和无
)一起被视为False
。基本上,如果第
行是以下内容的较短版本:
return [line for line in text.splitlines() if line != '']
简短回答:它从结果中过滤出空字符串
在Python中,列表理解的形式如下:
[<expr> for <vars> in <iterable> <filters-and-iterators>]
[适用于中]
其中,
为以下序列:
in的形式的迭代器;及
过滤形式的如果
Python将评估。只有在表达式具有truthinessTrue
的情况下,它才会传递该元素:如果过滤器是最后一步,这意味着将其添加到列表中;如果过滤器不是最后一步,则进一步处理(例如,处理下一个迭代器或过滤器)。否则它将忽略该项
str
ing具有真实性True
当且仅当字符串至少包含一个字符时。这意味着这里我们过滤掉非空字符串
自定义类的真实性可以通过重写\uuuuu bool\uuuuu
魔术函数来实现,或者如果缺少该函数,Python将查看\uuu len\uuuuu
是否返回非零值
None
和False
始终具有真实性False
,True
具有真实性True
,列表、集合、字典、元组和字符串等集合具有真实性True
当且仅当它们至少包含一个元素时。如果数值不为零,则数值通常具有真实性True
(因此负数也具有真实性True
)
程序员可以自由地为自定义类本身实现真实性(如上所述),尽管考虑这里的示例通常是一个好主意,因此将非空视为集合的真实性。过滤掉非空元素。只有满足if的元素才会放入列表中。这应该在任何理解教程中都会涉及。@Carcigenicate我认为他们很困惑,因为if行
似乎没有实际情况。这种混淆的根源是truthy
值。OP我建议你读一下:它简短易懂,truthy
值可能非常有用convenient@RobbieMilejczak嗯,如果是这样的话,应该说得更清楚。这样就改变了整个问题。但我怀疑,不管是哪一个,都有一个可用的复制品。
[<expr> for <vars> in <iterable> <filters-and-iterators>]