如何计算部分字符串出现在列表中的次数?

假设我有一个列表,我想计算部分字符串出现“AB”的次数有没有办法让 count() 工作?我想尝试在不将代码分解为循环的情况下尽可能提高效率。

my_list = ["ABC", "ABD", "DCF", "ARC", "AVB", "ABG"]

正确的输出= 3


富国沪深
浏览 162回答 5
5回答

潇湘沐

您的预期行为是什么["ABAB"]?你想要2还是1?如果你愿意2,你仍然会从“计数”中获得价值。sum(s.count("AB") for s in my_list)话虽这么说,你的问题似乎定义不明确,如果你的字符串是“AA”,你期望有多少["AAA", "AA", "A"]?1(准确)?2(每件)?3(所有可能的范围)?

慕田峪4524236

您可以使用 sum 内置函数。在你的情况下,my_list = ["ABC", "ABD", "DCF", "ARC", "AVB", "ABG"] sum('AB' in s for s in my_list)输出:3此代码有效,因为布尔值可以被视为整数。每次“AB”出现在字符串元素中时,都会返回 True。True 的整数值为 1。所以就好像每次字符串中出现 'AB' 时,都返回 1。因此,对返回的 1 求和将得出 1 在元素中出现的次数。

波斯汪

如果这是一个损害时间效率的巨大列表,您可以将其并行化。初始化一个全局计数器将列表拆分为 n 个块对于每个块,生成一个线程并将其发送到一个函数,该函数在内部运行一个循环以计算该块中“AB”的出现次数让每个线程更新 globalCounter当所有线程执行完毕,返回globalCounter作为结果虽然这仍然有效地遍历整个列表,但并行化缩短了时间。

慕尼黑的夜晚无繁华

循环遍历每个元素,如下所示:sum(1 for i in my_list if "AB" in i)或者更长的选择:count = 0for i in my_list:    if "AB" in my_list[i]: count+=1注意:我知道 OP不想循环,但我认为没有它是不可能的。

慕桂英3389331

你可以把它变成一个字符串并使用str.count:>>> my_list = ["ABC", "ABD", "DCF", "ARC", "AVB", "ABG"]>>> ' '.join(my_list).count('AB')3或者使用sum和理解:>>> sum(s.count('AB') for s in my_list)3
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python