为什么我的代码不会删除列表中的最后一个空元素?
templist = ['', 'hello', '', 'hi', 'mkay', '', '']
for element in templist:
if element == '':
templist.remove(element)
print (templist)
输出:
['hello', 'hi', 'mkay', '']
答案 0 :(得分:9)
因为您正在改变正在迭代的列表。可以把它想象成for循环使用索引进行迭代;移除元素减少了列表的长度,从而使索引无效> 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)