我正在尝试计算有多少非空行并且我的代码正常工作但是如果在不同的行中有相同的名称,我就无法计算,例如
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
答案 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()))