Python 尝试删除列表元素时获取索引超出范围错误
我有这样一份清单:Python 尝试删除列表元素时获取索引超出范围错误,python,list,indexing,range,Python,List,Indexing,Range,我有这样一份清单: l = ['(7 - 3)', '7 - 6', '(a + 13)'] 我想删除任何不包含字母“a”的表达式,因此只剩下['(a+13)]。 到目前为止,我已经尝试过: for i in range(len(l)): if "a" not in l[i]: l.pop(i) else: print(l[i]) 但是,我得到了一个列表索引超出范围的错误,不知道如何修复此错误。 有人能帮忙解决这个问题吗?在迭代时,千万不要在结构上操纵列表!使
l = ['(7 - 3)', '7 - 6', '(a + 13)']
我想删除任何不包含字母“a”
的表达式,因此只剩下['(a+13)]
。
到目前为止,我已经尝试过:
for i in range(len(l)):
if "a" not in l[i]:
l.pop(i)
else:
print(l[i])
但是,我得到了一个列表索引超出范围的错误,不知道如何修复此错误。有人能帮忙解决这个问题吗?在迭代时,千万不要在结构上操纵
列表
!使用条件理解
l = [x for x in l if 'a' in x]
或:
在迭代时,切勿在结构上操纵
列表
!使用条件理解
l = [x for x in l if 'a' in x]
或:
l.pop()
>>> x = [1,2,3]
>>> x.pop(0)
1
>>> x
[2, 3]
>>> x.pop(1)
3
>>> x
[2]
>>> x.pop(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop index out of range
如果您需要在迭代结束时列表中只包含包含“a”
的元素,那么您可能希望将这些项目添加到新列表中
things_with_a_in_them = []
for i in l:
if "a" in i:
things_with_a_in_them.append(i)
print(i)
如果你想让它更简洁
things_with_a_in_them = [i for i in l if "a" in i]
map(print, things_with_a_in_them)
使用不同的方法玩得开心。l.pop()
从列表中删除元素,因此列表变小了,但您没有调整迭代
>>> x = [1,2,3]
>>> x.pop(0)
1
>>> x
[2, 3]
>>> x.pop(1)
3
>>> x
[2]
>>> x.pop(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop index out of range
如果您需要在迭代结束时列表中只包含包含“a”
的元素,那么您可能希望将这些项目添加到新列表中
things_with_a_in_them = []
for i in l:
if "a" in i:
things_with_a_in_them.append(i)
print(i)
如果你想让它更简洁
things_with_a_in_them = [i for i in l if "a" in i]
map(print, things_with_a_in_them)
玩各种不同的方法玩得开心。问题是len(l)
返回3
,但是一旦你弹出一个项目,你的列表就会变短。最简单的方法是(假设你的列表不是令人望而却步的巨大)写一个新的列表:
l_new = [i for i in l if "a" in i]
问题是len(l)
返回3
,但一旦弹出项目,列表就会变短。最简单的方法是(假设你的列表不是令人望而却步的巨大)写一个新的列表:
l_new = [i for i in l if "a" in i]
如果您不想创建一个新的列表
,并使用弹出按钮保持您的逻辑
,则每次都必须检查len(l)
,您可以通过以下方式执行此操作:
l = ['(7 - 3)', '7 - 6', '(a + 13)']
i = 0
while i < len(l):
if "a" not in l[i]:
l.pop(i)
else:
print(l[i])
i += 1
l=['(7-3)'、'7-6'、'(a+13)]
i=0
而我
但是,正如其他人所要求的那样,最好创建一个新的具有列表理解功能的列表,如果您不想创建一个新的列表,并使用弹出按钮保持您的逻辑,那么您每次都必须检查len(l)
,您可以通过以下方式完成:
l = [x for x in l if 'a' in x]
l = ['(7 - 3)', '7 - 6', '(a + 13)']
i = 0
while i < len(l):
if "a" not in l[i]:
l.pop(i)
else:
print(l[i])
i += 1
l=['(7-3)'、'7-6'、'(a+13)]
i=0
而我
但正如其他人所要求的那样,最好使用列表理解功能创建一个新的列表
,当您从列表中弹出一个元素时,您会减小列表的大小,而for循环保持原有的长度。我建议使用第二个列表从中弹出。我建议使用一种新方法,创建一个新的列表和确实包含“a”的.append()项:new=[]#您在currentlist:I:new.append(I)中使用“l”表示“currentlist”中的“I”如果“a”当您从列表中弹出一个元素时,您会减小列表的大小,而for循环保持原有的长度。我建议使用第二个列表从中弹出。我建议使用一种新方法,创建一个新的列表和确实包含“a”的.append()项:new=[]#您在currentlist:I:new.append(I)中使用“l”表示“currentlist”中的“I”如果“a”
l = [x for x in l if 'a' in x]