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
添加回答
舉報