python list.remove()函数错误

时间:2014-04-03 22:20:01

标签: python

嗨,大家好我刚学会用python编写程序,并且一度陷入困境。我希望你们能解释/帮助。 提前谢谢。

items=[]
animals=[]
station1={}
station2={}
import os.path 

def main():
    endofprogram=False
    try:
        filename=input('Enter name of input file >')        
        file=open(filename,'r')
    except IOError:
        print('File does not exist')
        endofprogram=True     

    if (endofprogram==False):
        for line in file:
            line=line.strip('\n')   
            if (len(line)!=0)and line[0]!='#':  
                (x,y,z)=line.split(':')
                record=(x,y,z)
                temprecord=(x,z)
                items.append(record)
                animals.append(x)

                if temprecord[1]=='s1':
                    if temprecord[0] in station1:
                        station1[temprecord[0]]=station1[temprecord[0]]+1
                    else:
                        station1[temprecord[0]]=1
                elif temprecord[1]=='s2':
                    if temprecord[0] in station2:
                        station2[temprecord[0]]=station2[temprecord[0]]+1
                    else:
                        station2[temprecord[0]]=1 
    print(animals)
    for x in animals:
        while animals.count(x)!=1:
            animals.remove(x)
    animals.sort()

    print(animals)


main()   

因此,当我打印动物时,它会打印['a01', 'a02', 'a02', 'a02', 'a03', 'a04', 'a05']a02之外,列表中的所有元素都将被删除,直到剩下一个元素。我不知道为什么这是一个例外。

File:

a01:01-24-2011:s1
a03:01-24-2011:s2
a03:09-24-2011:s1
a03:10-23-2011:s1
a04:11-01-2011:s1
a04:11-02-2011:s2
a04:11-03-2011:s1
a04:01-01-2011:s1

2 个答案:

答案 0 :(得分:0)

你可以只使用set来删除列表中的重复项:

list(set(animals))

而不是这样做

for x in animals:
    while animals.count(x)!=1:
        animals.remove(x)

答案 1 :(得分:0)

您正在浏览列表时修改列表,因此出错。

您可以使用sests

为您的问题做些什么
>>> list(set(animals))
['a02', 'a03', 'a01', 'a04', 'a05']
>>> a2=list(set(animals))
>>> a2.sort()
>>> a2
['a01', 'a02', 'a03', 'a04', 'a05']

编辑: 考虑一下:

>>> animals
['a01', 'a02', 'a02', 'a02', 'a03', 'a04', 'a05']
>>> for x in animals:
...    animals.remove(x)
... 
>>> animals
['a02', 'a02', 'a04']

当您移除x时,动物会发生变化,因此for可能无法追踪它的位置。如果要浏览列表,则必须复制并浏览副本:

>>> animals=['a01', 'a02', 'a02', 'a02', 'a03', 'a04', 'a05']
>>> for x in animals[:]:
...    animals.remove(x)
... 
>>> animals
[]