如何计算文件中的唯一名称?

时间:2016-02-10 08:56:44

标签: python

我正在尝试计算有多少非空行并且我的代码正常工作但是如果在不同的行中有相同的名称,我就无法计算,例如

john 01/2
jack 01/2

john 02/3

因为我想计算重复名称(和不同日期)的行 作为一个

def number_people(path):

    x = 0
    with open(path) as f:
        for line in f:
            if line.strip():
                x += 1
    return x

2 个答案:

答案 0 :(得分:1)

如果该行总是看起来像名称日期':

def number_people(path):
    x = 0
    namesList = [] # Make a list of names
    with open(path) as f:
        for line in f:
            line = line.strip()
            try:
                name, date = line.split(' ') # if there's a space in between
                if name not in names: # If the name is not in namesList...
                    x += 1
                    namesList.append(name) # put the name in namesList
            except ValueError:
                print(line)
                #pass
    return x

修改

修复ValueError。注意:它现在跳过与split条件不匹配的行。它现在打印不匹配的行,但您也可以跳过它们(pass)并继续。

答案 1 :(得分:0)

函数len为您提供了一个可迭代的长度,这里是set

此处set应用于生成器表达式,并仅保留生成的唯一项,以便len(set(...))为您提供... <生成的不同元素的数量/ p>

生成器表达式对文件的行l进行操作,丢弃空行,对于每一行我们split,获取一个两元素列表,只保留第一个元素,即一个人的名字。

总结一下 sequence of names -> set -> unique names -> len -> number of unique names
这转换为以下函数定义

def number_people(path):
    return len(set(l.split()[0] for l in open(path) if l.strip()))