我在Python中遇到了以下代码行,我一直在想它究竟做了什么:
while '' in myList:
myList.remove('')
提前致谢。
答案 0 :(得分:4)
它从列表中删除所有空字符串,效率低下。
'' in myList
测试''
是myList
的成员;它将循环遍历myList
以扫描该值。 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
中的所有值,并根据这些值构建 new 列表对象,前提是它们不等于空字符串。
答案 1 :(得分:1)
简单地说,它会从myList
删除所有空字符串。
以下是细分:
# 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('')
但请注意,使用list comprehension:
可以更好地(更有效地)执行此操作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
是字符串列表且您使用的是Python 2.x,则可以使用更短的filter
:
myList = filter(None, myList)
答案 2 :(得分:0)
在Python中,两个单引号''
或双引号""
表示空字符串。
保持循环的条件是while
列表中存在空字符串,并且只有在没有空字符串时才会终止。
因此,它会从列表中删除所有空字符串。