为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

富国沪深 2023-06-13 10:59:39
假设我有一个列表,我想计算部分字符串出现“AB”的次数有没有办法让 count() 工作?我想尝试在不将代码分解为循环的情况下尽可能提高效率。my_list = ["ABC", "ABD", "DCF", "ARC", "AVB", "ABG"]正确的输出= 3
查看完整描述

5 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

您的预期行为是什么["ABAB"]?你想要2还是1?如果你愿意2,你仍然会从“计数”中获得价值。

sum(s.count("AB") for s in my_list)

话虽这么说,你的问题似乎定义不明确,如果你的字符串是“AA”,你期望有多少["AAA", "AA", "A"]?1(准确)?2(每件)?3(所有可能的范围)?


查看完整回答
反对 回复 2023-06-13
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

您可以使用 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 在元素中出现的次数。


查看完整回答
反对 回复 2023-06-13
?
波斯汪

TA贡献1811条经验 获得超4个赞

如果这是一个损害时间效率的巨大列表,您可以将其并行化。

  • 初始化一个全局计数器

  • 将列表拆分为 n 个块

  • 对于每个块,生成一个线程并将其发送到一个函数,该函数在内部运行一个循环以计算该块中“AB”的出现次数

  • 让每个线程更新 globalCounter

  • 当所有线程执行完毕,返回globalCounter作为结果

虽然这仍然有效地遍历整个列表,但并行化缩短了时间。


查看完整回答
反对 回复 2023-06-13
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

循环遍历每个元素,如下所示:


sum(1 for i in my_list if "AB" in i)

或者更长的选择:


count = 0

for i in my_list:

    if "AB" in my_list[i]: count+=1

注意:我知道 OP不想循环,但我认为没有它是不可能的。


查看完整回答
反对 回复 2023-06-13
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

你可以把它变成一个字符串并使用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


查看完整回答
反对 回复 2023-06-13
  • 5 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信