我有一个文件放在一个列表中,我想从它中取出一些东西,并附加到另一个列表(我没有问题),我遇到的问题是删除的东西第一个清单。下面是我尝试过但它只从原始列表中删除所有其他内容。
list:
bob g1 3110
bob g2 244
bob g3 -433
greg fun112 10595
greg fun113 -1203
greg fun114 -3049.999
greg fun115 3808
greg fun116 320
greg got112 -600
greg got113 5958
greg got114 1249
file1 = open('test','rb').read().splitlines()
file1=sorted(file1)
test_group = ['fun','got']
test= []
for product in file1:
spt = product.split(",")
for line in spt:
if line[:3] in test_group:
x = test.append(product)
y = file1.remove(product)
test []列表很好,我想要的所有项目都没有问题,但是当我查看file1时,它只取出了所有其他的'fun'和'got'行
为什么这只会取出所有其他的,我该如何解决?
答案 0 :(得分:11)
不要试图修改你正在迭代的列表!这不会起作用!
如果您复制了清单,那么它应该有效:
for product in file1[:]:
spt = product.split(",")
for line in spt:
if line[:3] in test_group:
x = test.append(product)
y = file1.remove(product)
答案 1 :(得分:3)
您不想操纵当前正在迭代的对象(例如,如果您尝试使用字典,那么您实际上会获得异常)。
此外,由于list.append
adn list.remove
就位,因此它始终返回None
- 所以没有必要将结果分配给任何内容。
我做的事情如下:
with open('test') as fin:
test = []
other = []
rows = (line.split() for line in fin)
for name, group, value in rows:
if group[:3] in ('fun', 'got'):
add = test.append
else:
add = other.append
add([name, group, value])
答案 2 :(得分:0)
可能是因为负整数,它可能是那些跳过的?你测试过了吗?