5 回答
TA贡献1816条经验 获得超6个赞
您的预期行为是什么["ABAB"]
?你想要2
还是1
?如果你愿意2
,你仍然会从“计数”中获得价值。
sum(s.count("AB") for s in my_list)
话虽这么说,你的问题似乎定义不明确,如果你的字符串是“AA”,你期望有多少["AAA", "AA", "A"]
?1(准确)?2(每件)?3(所有可能的范围)?
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 在元素中出现的次数。
TA贡献1811条经验 获得超4个赞
如果这是一个损害时间效率的巨大列表,您可以将其并行化。
初始化一个全局计数器
将列表拆分为 n 个块
对于每个块,生成一个线程并将其发送到一个函数,该函数在内部运行一个循环以计算该块中“AB”的出现次数
让每个线程更新 globalCounter
当所有线程执行完毕,返回globalCounter作为结果
虽然这仍然有效地遍历整个列表,但并行化缩短了时间。
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不想循环,但我认为没有它是不可能的。
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
添加回答
举报