0

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

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)

测试 [ ] 列表很好,我想要的所有项目都没有问题,但是当我查看 file1 时,它只会删除“有趣”和“得到”行中的所有其他行

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

4

3 回答 3

10

不要尝试修改您正在迭代的列表!那是行不通的!

如果您制作列表的副本,那么它应该可以工作:

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)
于 2012-10-16T17:53:39.810 回答
3

您不想操作当前正在迭代的对象(例如,如果您使用字典尝试此操作,您实际上会遇到异常)。

此外,由于list.appendadnlist.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])
于 2012-10-16T18:00:22.400 回答
0

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

于 2012-10-16T17:53:06.860 回答