将列表中的每个项目与之前的所有项目进行比较,仅打印唯一项目

时间:2012-05-04 12:39:41

标签: regex python-3.x comparison

我使用以下正则表达式匹配所有出现的特殊数字:

^([0-57-9]|E)[12][0-9]{3}[A-Z]?[A-Z]([0-9]{3}|[0-9]{4})

我们假设此正则表达式匹配以下五个数字:

31971R0974
11957E075
31971R0974-A01P2
31971R0974-A05
51992PC0405

然后使用以下代码打印这些匹配项。这将打印列表中的每个项目,如果项目包含短划线,则会丢弃短划线后的所有内容。

def number_function():

    for x in range(0, 10):

    print("Number", number_variable[x].split('-', 1)[0])

然而,这将打印五行,其中第1,3和4行是相同的。

我需要你的帮助来编写一个脚本,将每个项目与之前的所有项目进行比较,并且仅在项目尚不存在的情况下打印该项目。

因此,所需的输出将是以下三行:

31971R0974
11957E075
51992PC0405

编辑2:

我解决了!我只需要做一些移动。这是成品:

def instrument_function():
    desired = set()

    for x in range(0, 50):
        try:
            instruments_celex[x]
        except IndexError:
            pass
        else:
            before_dash = instruments_celex[x].split('-', 1)[0]
            desired.add(before_dash)        

    for x in desired:
        print("Cited instrument", x)

2 个答案:

答案 0 :(得分:2)

到目前为止,我几乎没有做过任何python,但这可能就是你所追求的

def number_function():
    desired = set()
    for x in range(0, 10):
        before_hyphen = number_variable[x].split('-', 1)[0]
        desired.add(before_hyphen)
    for x in desired:
        print("Number", x)

答案 1 :(得分:0)

以下是“完成”功能的一个版本,它更加合适。

# Don't use instruments_celex as a global variable, that's terrible. 
# Pass it in to the function instead:
def instrument_function(instruments_celex): 
    unique = set()
    # In Python you don't need an integer loop variable. This is not Java.
    # Just loop over the list:
    for entry in instruments_celex:
       unique.add(entry.split('-', 1)[0])

    for entry in unique:
        print("Cited instrument", entry)

您还可以使用生成器表达式来缩短它:

def instrument_function(instruments_celex): 
    unique = set(entry.split('-', 1)[0] for entry in instruments_celex)
    for entry in set:
       print("Cited instrument", entry)

就是这样。实际上这很简单,除非我在程序中至少做过两次,否则我不会单独使用它。