假设我有一个文本文件,如下所示:
28
28
28
57
57
63
63
63
63
等等。如何将它存储在我的程序列表中,使其看起来像[28,57,63,...](不允许其他数字排序!)基本上,每个唯一的数字应该只列入一次列表,以及在文件中看到它们的顺序。
答案 0 :(得分:2)
您可以使用collections.OrderedDict
获取唯一的数字列表,并保留订单。
from collections import OrderedDict
with open("Input.txt") as in_file:
print OrderedDict().fromkeys(int(line) for line in in_file).keys()
# [28, 57, 63]
如果文件中元素的顺序无关紧要,您可以将每一行转换为int,将其放在set
(仅存储唯一元素)中,然后转换回像这样的列表
with open("Input.txt") as in_file:
print list(set(int(line) for line in in_file))
# [57, 28, 63]
答案 1 :(得分:2)
您可以使用readlines()
方法获取元素。结果将是一个字符串,因此您必须将其转换为int
。
在此之后,您可以将其转换为set()
,这将删除重复项。最后将其转换回list
:
with open("data.txt", "r") as f:
l = [int(e) for e in f.readlines()]
l = list(set(l))
print l
<强>输出:强>
>>> [57, 28, 63]
您也可以在一行中执行此操作:
l = list(set([int(e) for e in f.readlines()]))
甚至,使用生成器(以避免列表理解):
l = list(set(int(e) for e in f.readlines()))
答案 2 :(得分:2)
听起来像是一个很好的用例。
seen = set()
result = []
for line in open('in.txt'):
if line not in seen:
result.append(int(line))
seen.add(line)
或者使用一些排序魔术:
numbers = map(int, open('in.txt'))
print sorted(list(set(numbers)), key=lambda x: numbers.index(x))