Python列表删除追加

时间:2012-10-16 17:49:53

标签: python python-2.7

我有一个文件放在一个列表中,我想从它中取出一些东西,并附加到另一个列表(我没有问题),我遇到的问题是删除的东西第一个清单。下面是我尝试过但它只从原始列表中删除所有其他内容。

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'行

为什么这只会取出所有其他的,我该如何解决?

3 个答案:

答案 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)

可能是因为负整数,它可能是那些跳过的?你测试过了吗?