5 回答

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
您的預(yù)期行為是什么["ABAB"]
?你想要2
還是1
?如果你愿意2
,你仍然會(huì)從“計(jì)數(shù)”中獲得價(jià)值。
sum(s.count("AB") for s in my_list)
話雖這么說(shuō),你的問(wèn)題似乎定義不明確,如果你的字符串是“AA”,你期望有多少["AAA", "AA", "A"]
?1(準(zhǔn)確)?2(每件)?3(所有可能的范圍)?

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
您可以使用 sum 內(nèi)置函數(shù)。在你的情況下,
my_list = ["ABC", "ABD", "DCF", "ARC", "AVB", "ABG"] sum('AB' in s for s in my_list)
輸出:3
此代碼有效,因?yàn)椴紶栔悼梢员灰暈檎麛?shù)。每次“AB”出現(xiàn)在字符串元素中時(shí),都會(huì)返回 True。True 的整數(shù)值為 1。所以就好像每次字符串中出現(xiàn) 'AB' 時(shí),都返回 1。因此,對(duì)返回的 1 求和將得出 1 在元素中出現(xiàn)的次數(shù)。

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果這是一個(gè)損害時(shí)間效率的巨大列表,您可以將其并行化。
初始化一個(gè)全局計(jì)數(shù)器
將列表拆分為 n 個(gè)塊
對(duì)于每個(gè)塊,生成一個(gè)線程并將其發(fā)送到一個(gè)函數(shù),該函數(shù)在內(nèi)部運(yùn)行一個(gè)循環(huán)以計(jì)算該塊中“AB”的出現(xiàn)次數(shù)
讓每個(gè)線程更新 globalCounter
當(dāng)所有線程執(zhí)行完畢,返回globalCounter作為結(jié)果
雖然這仍然有效地遍歷整個(gè)列表,但并行化縮短了時(shí)間。

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊
循環(huán)遍歷每個(gè)元素,如下所示:
sum(1 for i in my_list if "AB" in i)
或者更長(zhǎng)的選擇:
count = 0
for i in my_list:
if "AB" in my_list[i]: count+=1
注意:我知道 OP不想循環(huán),但我認(rèn)為沒(méi)有它是不可能的。

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
你可以把它變成一個(gè)字符串并使用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
添加回答
舉報(bào)