我有一个试图使用for循环取出列表中的元素,因为每次元素的位置通过删除前一个元素而改变,我真的不知道我是否给自己清楚,但只是一个例子:
list1=[Four,Nine,Twelve,Eleven,Two,Five]
带索引的列表
a=[0,1,3]
所以我想取下索引为0 1 3的元素,我使用这个:
x=len(a)
for i in range(0,x):
q=0
z=a[q]
list1.pop(z)
q=q+1
但是每次循环从列表中删除一个元素时,元素的位置也会改变,所以我没有得到我想要的东西......
答案 0 :(得分:0)
你可以像这样从头开始弹出:
list1=['Four','Nine','Twelve','Eleven','Two','Five']
a=[0,1,3]
for idx in sorted(a, reverse = True):
list1.pop(idx)
>>>['Twelve', 'Two', 'Five']
这样,首先删除索引3,不会影响索引1和0的位置,因此不需要调整位置
答案 1 :(得分:0)
如果您的列表没有空值或空值,您可以使用以下代码:
list1 = ['a', 'b', 'c', 'd', 'e', 'f']
a = [0,1,3]
for i in a:
list1[i]=None # Set the value to None`
final_list = filter(None, list1) # Remove all None
答案 2 :(得分:0)
你的第一个问题是你在循环中设置sqlite3.OperationalError: near ".": syntax error
而不是在它之前设置一次,所以每次你create table
时,它都会在下次被遗忘时被遗忘。但你可以简化这一过程,而不是修复它。首先,q=0
应该与q=q+1
相同,所以只需使用q
:
i
或者,更好的是,只需直接遍历i
:
x = len(a)
for i in range(0, x):
z = a[i]
list1.pop(z)
然而,这只是让您了解您所询问的实际问题。实际上,出于这个原因,您通常不希望从循环中删除或插入到列表中。但是如果你考虑一下,如果你确保从右到左工作,你转移的唯一值就是那些你不想再触摸的值。所以:
a
但是,除非你真的需要改变你的原始列表,否则只需制作副本,过滤掉你不想要的副本就会简单得多:
for z in a:
list1.pop(z)
您可以轻松地将其转换为列表理解:
for z in sorted(a, reverse=True):
list1.pop(z)