这是我下面的代码,我正在尝试从第一个列表中删除所有非零对象,并在第二个列表中删除相应的索引。它目前正在循环的第一次迭代中删除第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
导致
答案 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)