微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将列表传递到另一个函数,然后制作列表列表

如何解决如何将列表传递到另一个函数,然后制作列表列表

我有一个名为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 举报,一经查实,本站将立刻删除。