Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中条件的While循环使用单引号_Python_While Loop - Fatal编程技术网

Python中条件的While循环使用单引号

Python中条件的While循环使用单引号,python,while-loop,Python,While Loop,我在Python中遇到了以下代码行,我一直想知道它到底做了什么: while '' in myList: myList.remove('') 提前感谢。它从列表中删除所有空字符串,效率低下 myList中的'测试'是否是myList的成员;它将在myList上循环以扫描值myList.remove(“”)扫描myList以查找列表中等于'的第一个元素,并将其从列表中删除: >>> myList ['', 'not empty'] >>> '' in

我在Python中遇到了以下代码行,我一直想知道它到底做了什么:

while '' in myList:
    myList.remove('')

提前感谢。

它从列表中删除所有空字符串,效率低下

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
中的所有值,并根据这些值构建一个新的列表对象,前提是这些值不等于空字符串。

它会从列表中删除所有空字符串,效率低下

myList = [v for v in myList if v != '']
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
中的所有值,并根据这些值构建一个新的列表对象,前提是这些值不等于空字符串。

简单地说,它将从
myList
中删除所有空字符串

myList = [v for v in myList if v != '']
以下为分项数字:

# 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
纯粹是字符串列表:

# Empty strings evaluate to `False` in Python
myList = [x for x in myList if x]

如果
myList
是一个字符串列表,并且您使用的是Python 2.x,那么可以使用更短的字符串:

myList = filter(None, myList)

简单地说,它从
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('')

但是请注意,通过以下方法,您可以做得更好(效率更高):

或者,如果
myList
纯粹是字符串列表:

# Empty strings evaluate to `False` in Python
myList = [x for x in myList if x]

如果
myList
是一个字符串列表,并且您使用的是Python 2.x,那么可以使用更短的字符串:

myList = filter(None, myList)

在Python中,两个单引号表示空字符串

保持循环的条件是
,而
列表中存在空字符串,并且只有在没有更多空字符串时才会终止


因此,它将从列表中删除所有空字符串

在Python中,两个单引号表示空字符串

保持循环的条件是,而列表中存在空字符串,并且只有在没有更多空字符串时才会终止


因此,它将从列表中删除所有空字符串

@Konos5-Pieters解释得很好,但是使用列表理解更有效,因为它只在列表中运行一次,而不是多次。@Konos5-Pieters解释得很好,但是使用列表理解更有效,因为它只在列表中运行一次,而不是多次。正如您所注意的,重写并不等同于原始代码——因为它创建了一个新列表,如果该列表是共享的,其他地方将继续看到包含所有空字符串的旧列表。要解决此问题,请使用切片分配:
myList[:]=(如果v!='',则v代表myList中的v)
。正如您所注意的,重写并不等同于原始代码-因为它创建了一个新列表,如果共享了该列表,则其他位置将继续看到包含所有空字符串的旧列表。若要解决此问题,请使用切片分配:
myList[:]=(如果v!='',则v代表myList中的v)