让我清理一下,让人们更好地理解。
我正在阅读一个文本文件而且我只想打印一次数字,即使它们稍后会再次出现在列表中。
示例文本文件:
100
200
300
200
根据我的逻辑,由于200在文本文件中两次,我只想打印一次。所以我想要的输出看起来就像使用上面的示例文本文件。
100
200
300
这是另一个澄清的例子(文本文件在下面)......
250A
300D
300D
300D
250A
上面示例的指定输出将是:
250A
300D
答案 0 :(得分:2)
如果规则是“仅打印没有邻居的数字”:
import itertools
def remove_consecutives(seq):
return [k for k,v in itertools.groupby(seq) if len(list(v)) == 1]
seq = [1, 2, 3, 3, 3, 2, 4]
print remove_consecutives(seq)
#result: [1, 2, 2, 4]
如果规则是“打印出现的每个号码,但只打印一次”:
def remove_repeats(seq):
seen = set()
result = []
for item in seq:
if item not in seen:
result.append(item)
seen.add(item)
return result
seq = [1, 2, 3, 3, 3, 2, 4]
print remove_repeats(seq)
#result: [1, 2, 3, 4]
如果规则是“打印出现的每个号码,但只打印一次,并且只有当他们没有与他们相同的邻居时”:
import itertools
def remove_consecutives(seq):
return [k for k,v in itertools.groupby(seq) if len(list(v)) == 1]
def remove_repeats(seq):
seen = set()
result = []
for item in seq:
if item not in seen:
result.append(item)
seen.add(item)
return result
seq = [1, 2, 3, 3, 3, 2, 4]
print remove_repeats(remove_consecutives(seq))
#result: [1, 2, 4]
答案 1 :(得分:0)
为什么不将文本文件中的每个数字读入一个集合然后打印出来?
答案 2 :(得分:0)
您可以将这些数字读入python列表。如果它们在文件内,它将只是:
with file('your_file.txt', 'r') as f:
numbers = [line for line in f]
然后你可以将该列表转换为集合:
unique_numbers = set(numbers)
在unique_numbers
内,您只能获得一次。
答案 3 :(得分:0)
两个人建议使用set()删除重复项,我认为这是一个好主意。 Python sets有点像列表,但每个值只能出现一次。
以下是一些示例代码:
# Import the file as a list
with open('OldFile.txt','r') as f:
values = f.readlines()
# Make a set object
unique_values = set(values)
# Write the set to a new file
with open('NewFile.txt','w') as f:
f.writelines(unique_values)
警告:set()不尊重元素的顺序。如果这是一个问题,请考虑sorting他们是这样的:
unique_values = sorted(set(values))