嗨,大家好我刚学会用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
答案 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
[]