我的Python课程有几项任务。我被困在哪里开始。
基本上,他们可以归结为编写各种程序来打印具有最多关注者数量的用户名,并且所有用户名都以字母数字顺序打印相同的计数。有问题的虚拟文件名为follows.txt
,包含以下内容:
andrew fred
fred
judy andrew fred
george judy andrew
john george
每行以用户名开头,然后每个姓名后面跟着他们的名字。但是主文件要大得多,并且包含非字母数字字符。
编辑:我需要写什么才能带回具有最高计数的用户名,该用户名也可用于包含#
等字符的用户名?
我尝试了几种方法,但在找到正在尝试编写代码的正确方法时遇到了一些错误。
user = list()
count = ()
maxCount = ()
follows = ['andrew fred', 'fred', 'judy andrew fred', 'george judy andrew',
'john george']
以及:
with open('follows.txt', 'r') as follows:
for line in follows:
for word in line:
count += 1
word += 1
if count > maxCount:
maxCount == count
count == 0
user.append(line(0))
elif count == maxCount:
user.append(line(0))
使用上面的代码,我使用的程序无法打开文本文件,因此我将其转换为程序能够读取的内容,但代码转换为注释是我认为应该工作。这是我能够到达的地方。
答案 0 :(得分:0)
您可以open
该文件,并为每一行.split()
将其转换为单词列表,例如。
with open('follows.txt') as follows:
data = [line.split() for line in follows]
这会为您提供一个行列表,其中每行是一个单词列表。这将是一个很好的起点。
请注意,假设follows.txt
位于您的工作目录中(通常是您从python
启动的地方。尝试将完整路径传递给open()
,如果这不起作用。
答案 1 :(得分:0)
以下是一些提示:
Python中的字符串有一个名为split()
的方法,它将字符串分成字符串列表。如果你没有传递任何参数,它会假设你按空格分割:
>>> 'judy andrew fred'.split()
['judy', 'andrew', 'fred']
Python的内置len()
函数告诉您任何对象有多少元素。对于列表,它可以按预期工作:
>>> len(['judy', 'andrew', 'fred'])
3
当您使用Python读取文件时,最常见的是逐行执行:
>>> with open('file.txt') as file:
... for line in file:
... print(line)
andrew fred
fred
judy andrew fred
george judy andrew
john george
您不必担心#
等字符,因为split()
方法无法区分#
和任何字母数字字符。
答案 2 :(得分:0)
您可以使用len()
,readlines()
和split()
函数以及其他答案中提到的列表推导。除此之外,您还可以使用字典理解以更有意义的方式保存数据。
In [1]: with open('follows.txt', 'r') as f:
...: follows = {p[0]: len(p) - 1 for p in [user.split() for user in f.read().splitlines()]}
...:
In [2]: follows
Out[2]: {'andrew': 1, 'fred': 0, 'george': 2, 'john': 1, 'judy': 2}
答案 3 :(得分:0)
我能想到的最简单的方法是确定包含最多单词的行,并从中减去1
以获得关注者的数量。请注意,这可能无法处理" tie"你想要的方式(但你从未提及在那种情况下该做什么)。
with open('follows.txt', 'r') as follows:
mostWords = max(follows, key=lambda line: len(line.split()))
maxCount = len(mostWords.split()) - 1
print(maxCount) # -> 2
答案 4 :(得分:0)
您不需要在每行中包含第一个单词以供关注者计数,并返回具有最多关注者的用户列表。因此,首先使用分区然后拆分。计算最大频率并返回适当的值。
with open('follows.txt') as f:
content = f.readlines()
content = [x.strip() for x in content]
foll_list = []
for i in content:
follow = (i.partition(' ')[2]).split()
foll_list.extend(follow)
foll_count = {x:foll_list.count(x) for x in foll_list}
print("maximum following count: ", [key for key,val in foll_count.items() if val == max(foll_count.values())])