如何使用索引取消元素

时间:2018-03-27 04:53:15

标签: python list indexing pop

我有一个试图使用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

但是每次循环从列表中删除一个元素时,元素的位置也会改变,所以我没有得到我想要的东西......

3 个答案:

答案 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)