gpt4 book ai didi

python - 标签计数器 Python

转载 作者:太空宇宙 更新时间:2023-11-04 07:48:53 24 4
gpt4 key购买 nike

我是一名 Python 初学者。作为练习,我必须编写一个 python 函数来扫描字符串列表,计算主题标 checkout 现的次数并将其放入字典中。示例:

[
"hi #weekend",
"good morning #zurich #limmat",
"spend my #weekend in #zurich",
"#zurich <3"
]

分析完这个列表后,函数应该返回:

{'weekend': 2, 'zurich': 3, 'limmat': 1}

只允许使用字母和数字,空格和句点等其他任何内容都可以作为标签的结尾。

我们可以假设该参数始终是一个有效的字符串列表,您不需要提供任何类型的输入验证。

主题标签是特定于案例的。 #ZURICH 应算作与 #zurich 不同的主题标签。


我有一个丑陋的函数初稿,如果字符串中有多个主题标签,它就不起作用,因为它会跳过第二个。我不一定需要关于如何简化函数或使其更像 pythonic 的提示(当然,它仍然会受到赞赏)。我只想知道为什么它不起作用。


def analyze(posts):
hashtag_dict = {}
for post_string in posts:
for char in post_string:
if char == "#":
hash_index = post_string.find(char)
counter = 1
tag = ""
for tag_char in post_string[hash_index + 1:]:
if tag_char.isdigit() or tag_char.isalpha():
tag += tag_char
elif tag in hashtag_dict:
counter += 1
hashtag_dict[tag] = counter
break
else:
hashtag_dict[tag] = counter
break
return hashtag_dict


posts = [
"hi #weekend",
"good morning #zurich #limmat",
"spend my #weekend in #zurich",
"#zurich <3"]

print(analyze(posts))


如有任何帮助,我们将不胜感激!

最佳答案

从根本上说,你的函数不起作用,因为这一行

hash_index = post_string.find(char)

将始终在字符串中找到第一个 哈希标签的索引。这可以通过提供 start index to str.find 来解决。 ,或者,更好的是,根本不调用 str.find 而是在遍历字符串时维护索引(您可以为此使用 enumerate)。更好的是,不要使用索引,如果您重构解析器以使用状态机,则不需要它。

也就是说,Pythonic 实现会将整个函数替换为 regular expression ,这将使它变得更短、更正确、更易读,并且可能更高效。

关于python - 标签计数器 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58500592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com