仅打印非重新编号(Python)

时间:2015-09-23 13:18:04

标签: python printing numbers logic

让我清理一下,让人们更好地理解。

我正在阅读一个文本文件而且我只想打印一次数字,即使它们稍后会再次出现在列表中。

示例文本文件:

 100
 200
 300
 200

根据我的逻辑,由于200在文本文件中两次,我只想打印一次。所以我想要的输出看起来就像使用上面的示例文本文件。

 100
 200
 300

这是另一个澄清的例子(文本文件在下面)......

 250A
 300D
 300D
 300D
 250A

上面示例的指定输出将是:

 250A
 300D

4 个答案:

答案 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))