我有一个清单
a = [1,2,3,4,5,6,7,8,9]
b = [10,11,12,13,14,15,16,17,18]
在遍历列表b
时,如果任何数字小于15,则从列表a
中删除其对应的数字(索引)。
例如: - 列表中b
10,11,12,13,14
小于15,因此应删除列表a
中的对应项,即1,2,3,4,5
。
目前,我正在这样做:
for index, i in enumerate(b):
if i < 15:
del(a[index])
这会返回一个超出范围的索引错误。
我该怎么做?
答案 0 :(得分:9)
您应该使用列表理解和zip而不是删除a
中的元素,而是取其b
值超过15的元素。示例 -
a[:] = [i for i,j in zip(a,b) if j >=15]
我们在左侧使用a[:]
,以便a
列表对象在原地变异。 (这与a = <something>
不同,因为后者只是将名称a
绑定到一个新列表,而前者则在列表中改变列表。
演示 -
>>> a = [1,2,3,4,5,6,7,8,9]
>>>
>>> b = [10,11,12,13,14,15,16,17,18]
>>> a[:] = [i for i,j in zip(a,b) if j >=15]
>>> a
[6, 7, 8, 9]
答案 1 :(得分:2)
当我运行它时,我没有得到索引错误,但我最终生成了a
= [2, 4, 6, 8]
。一个问题可能是,一旦您开始删除a
的元素,从左向右移动,其索引将会移位,并且将不再与b
的索引对齐。我尝试向后计数(我跳过使用枚举,因为我是一个菜鸟,我发现很难记住它是如何工作的):
for i in range(len(b)-1,-1,-1):
if b[i] < 15:
del(a[i])
答案 2 :(得分:0)
尝试使用临时列表
>>> a = [1,2,3,4,5,6,7,8,9]
>>> b = [10,11,12,13,14,15,16,17,18]
>>> c=[]
>>> for i in range(0,len(b),1):
if b[i]>=15:
c.append(a[i])
>>> a=c
>>> a
[6, 7, 8, 9]