根据计数和索引删除项目

时间:2017-05-19 20:00:01

标签: python

这是我下面的代码,我正在尝试从第一个列表中删除所有非零对象,并在第二个列表中删除相应的索引。它目前正在循环的第一次迭代中删除第0个实体,但就是这样。我基本上问为什么当r达到2时它没有删除值“2”

r = 1
OG = [1, 2, 3]

Pred = [0, 2, 6]

while r < 10:
    print "r: %s" %r
    print OG
    print Pred

    while OG.count(r) > 0:
        bump = OG.index(r)
        del OG[bump]
        del Pred[bump]
        print "success"

    r = r+.1
print OG

导致

enter image description here

1 个答案:

答案 0 :(得分:4)

  

我试图从第一个列表中删除所有非零对象,并在第二个列表中删除相应的索引。

创建两个新列表并重新分配列表名称比执行该操作要容易得多。

我会将zip列表放在一起并成对循环其项目,只保留第一个元素为零的对。然后使用>>> list_1 = [1, 0, 2, 0, 0, 3] >>> list_2 = [1, 2, 3, 4, 5, 6] >>> >>> list_1, list_2 = map(list, zip(*((x, y) for x, y in zip(list_1, list_2) if not x))) >>> list_1 [0, 0, 0] >>> list_2 [2, 4, 5] 再次转置结果并重新指定名称。

我认为你的名单保证长度相同。

import fileinput
import sys

encoding = 'utf8'
end = '\n'

seen = set()
dupeCount = 0

for line in fileinput.FileInput('Dupes.csv', inplace=1, mode='rU'):
    stripped = line.strip()
    if stripped in seen:
        dupeCount += 1
        continue
    seen.add(stripped)

    # Sends the output in the right representation
    sys.stdout.buffer.write(stripped.encode(encoding) + end.encode(encoding))

print('Removed %d dupes' % dupeCount)