迭代时从列表中删除

时间:2015-10-16 04:26:33

标签: python list

我有一个清单

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])

这会返回一个超出范围的索引错误。

我该怎么做?

3 个答案:

答案 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]
相关问题