如何解决如何将列表传递到另一个函数,然后制作列表列表
我有一个名为labeled
的函数,该函数基本上扫描列表中每个元素的第一个字符,并仅返回带有标签的那些元素。到目前为止,我已经把该功能调低了。但是,我需要一个从原始函数获取列表的函数,然后计算该值在列表中出现的次数。因此,假设用户输入了"I really like hot cheetos #good #yum #yum"
,我将需要使用该字符串,让第一个函数返回主题标签列表,然后让第二个函数返回类似['yum',2,'good',1]
的东西。这就是我现在拥有的:
def labeled(x):
x = input("Enter a sentence or quit: ")
if x == 'quit':
return "Bye"
labeled_list = []
for word in x.split():
if word [0] == "#":
labeled_list.append(word[1:])
for hashtags in labeled_list:
return labeled_list
print(labeled())
def tabulated(labeled_list):
解决方法
collections.Counter
是满足您所有频率计数需求的方法,您可以使用re.findall(r"(?:^|\s)#(\w+)",s)
很好地提取主题标签。
话虽如此,所需的输出结构对我而言似乎不是最佳的。要找到单词的频率,需要进行线性搜索,然后进行可能会崩溃的index + 1
操作并对其进行迭代是很尴尬的。我更喜欢Counter
能给您的字典,或者至少是一个元组词频对列表。以下代码显示了如何获取Counter
,然后将数据逐步转换为(可能是?)不太有用的结构:
>>> import re
>>> s = "I really like hot cheetos #good #yum #yum"
>>> tags = re.findall(r"(?:^|\s)#(\w+)",s)
>>> tags
['good','yum','yum']
>>> from collections import Counter
>>> Counter(tags)
Counter({'yum': 2,'good': 1})
>>> [x for x in Counter(tags).most_common()]
[('yum',2),('good',1)]
>>> [y for x in Counter(tags).most_common() for y in x]
['yum',2,'good',1]
,
这是我的看法,使用列表推导和集合。Counter。
>>> import collections
>>> t = "I really like hot cheetos #good #yum #yum"
>>> l = [w.replace('#') for w in t.split() if w[0] == '#']
>>> collections.Counter(l)
Counter({'#yum': 2,'#good': 1})
这是一种简化的方法,但是,如果您有简单的需求,则可以完成此工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。