从列表中删除所有空元素

时间:2016-11-14 21:37:19

标签: python list python-3.x

为什么我的代码不会删除列表中的最后一个空元素?

templist = ['', 'hello', '', 'hi', 'mkay', '', '']

for element in templist:
    if element == '':
        templist.remove(element)

print (templist)

输出:

['hello', 'hi', 'mkay', '']

4 个答案:

答案 0 :(得分:9)

因为您正在改变正在迭代的列表。可以把它想象成for循环使用索引进行迭代;移除元素减少了列表的长度,从而使索引无效&gt; var valueSum = 0; var valueAverage = 0; var valueMax = 0; var valueMin = 0; $( "#calculate" ).click(processValues); function processValues() {//listens for click event $("#results" ).html( "" );//clears any list items from last calculation var valueString = $( "#valueList" ).val(); var value = $.map(valueString.split(","), Number ); //this is an array valueCount = value.length; //get the lenght of the array (number of values) // //Use a loop (or loops) here to help calculate the sum, average, max, and min of the values // $("#results" ).append( "<li>The values entered: " + valueString + ".</li>" );//appends values $("#results" ).append( "<li>There are " + valueCount + " values.</li>" );//appends value count //need to append Sum, average, max, and min to bullet list here //clears text field for next set of values to be entered $("#valueList").v

&#34; Pythonic&#34;解决方法是使用列表解析:

len(list) - 1

执行就地从列表中删除项目。

答案 1 :(得分:7)

嗯,你总是可以这样做:

new_list = list(filter(None, templist))

答案 2 :(得分:2)

通过遍历列表副本来指出您的错误,即将for语句更改为:

for element in templist[:]:

在迭代时更改列表会导致您看到奇怪的结果。

更紧凑,您可以使用filter

templist = list(filter(None, templist))

当提供None时,它只返回true的元素(空字符串计算为false)。

答案 3 :(得分:0)

您可以创建一个名为wordGrabber的新列表,而不是删除空白,您可以使用内容填充新列表

templist = ['', 'hello', '', 'hi', 'mkay', '', '']

for element in templist:
    if element != '':
        wordGrabber.append(element)

print (wordGrabber)