我的代码如下所示:
def nue(li):
for i in li:
li.remove(i)
print(li)
li = [1, 2, 3]
nue(li)
但是,运行此结果会导致:
>>> [2]
更一般地说,如何在迭代列表时删除列表中的第i个位置(原因是它在嵌套循环或某些类似的测试中失败)?
答案 0 :(得分:1)
你可以这样做
function makeTabs() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var last = sheet.getLastRow();//identifies the last active row on the sheet
//loop through the code until each row creates a tab.
for(var i=1; i<last; i++){
var tabName = sheet.getRange(i+1,9).getValue();//get the range in column I and get the value.
var create = ss.insertSheet(tabName);//create a new sheet with the value
var formulas = [
['=transpose('Form Responses 1'!J2:O2)'],
['=Arrayformula(IF(A2:A="",,VLookup(A2:A,ImportedData!A1:S,{2,11,15,18,17,19},0)))']] ;
var cell = sheet.getRange("A2:B2");
cell.setFormulas(formulas);
}
}
def nue(li):
for i in li[:]:
li.remove(i)
print(li)
li = [1, 2, 3]
nue(li)
将克隆原始li
答案 1 :(得分:0)
尝试列表理解:
def remi(slist, i): # remi means REMove I
return [slist[j]
for j in range(len(slist))
if j != i]
print(remi ([1,2,3,4], 2))
输出:
[1, 2, 4]
答案 2 :(得分:0)
为什么不使用列表推导而不是从现有列表中删除项目?
<h1>Votes#show</h1>
<h2><%= @person.name %></h2>
<%= image_tag @person.image %>
如果您不想使用列表推导,可以尝试过滤功能
old_list = [1,2,3,4,5]
li = [1,2,3]
new_list = [i for i in old_list if i not in li]
答案 3 :(得分:0)
您可能需要考虑反向遍历数组。以下代码演示了执行相同操作的三个函数。所有这些都称为prune
并且可以互换。通过以相反的顺序查看数组,可以避免更改将来要检查的值的索引。
#! /usr/bin/env python3
def main():
array = list(range(20))
print(array)
prune(array, lambda value: value % 3)
print(array)
def prune(array, del_condition):
for index, value in reversed(tuple(enumerate(array))):
if del_condition(value):
del array[index]
def prune(array, del_condition):
for index in range(len(array) - 1, -1, -1):
value = array[index]
if del_condition(value):
del array[index]
def prune(array, del_condition):
for index in reversed(range(len(array))):
if del_condition(array[index]):
del array[index]
if __name__ == '__main__':
main()