我在Python中看到了以下一行代码,我一直在想它到底能做什么:
while '' in myList:
myList.remove('')
提前谢谢。
它从列表中删除所有空字符串,效率很低。
CCD_ 1测试CCD_ 2是否是CCD_ 3的成员;它将在CCD_ 4上循环以扫描该值。myList.remove('')
扫描myList
以找到列表中等于''
的第一个元素,并将其从列表中删除:
>>> myList ['', 'not empty']
>>> '' in myList
True
>>> myList.remove('')
>>> myList
['not empty']
>>> '' in myList
False
因此,代码重复扫描myList
以查找空字符串,每次找到一个,都会执行另一次扫描以删除该空字符串。
myList = [v for v in myList if v != '']
将是一种不同的、更有效的方式来完成相同的任务。这使用了列表理解;循环myList
中的所有值,并根据这些值构建一个新的列表对象,前提是这些值不等于空字符串。
简单地说,它从'' in myList
0中删除所有空字符串。
以下是一个细分:
# While there are empty strings in `myList`...
while '' in myList:
# ...call `myList.remove` with an empty string as its argument.
# This will remove the one that is currently the closest to the start of the list.
myList.remove('')
然而,请注意,通过列表理解,你可以做得更好(更有效):
myList = [x for x in myList if x != '']
或者,如果myList
纯粹是字符串列表:
# Empty strings evaluate to `False` in Python
myList = [x for x in myList if x]
如果myList
是一个字符串列表,并且您使用的是Python2.x,那么您可以使用filter
,它甚至更短:
myList = filter(None, myList)
在Python中,两个单引号''
或双引号""
表示空字符串。
保持循环的条件是while
—列表中存在空字符串,并且只有在没有空字符串时才会终止。
因此,它从列表中删除所有空字符串。