Python从其他字符串列表中计算列表中子字符串的数量,没有重复


问题内容

我有两个清单:

main_list = ['Smith', 'Smith', 'Roger', 'Roger-Smith', '42']
master_list = ['Smith', 'Roger']

我想计算从main_list字符串中的master_list中找到一个字符串的次数,而无需计算两次相同项。

示例:对于上面的两个列表,我的函数的结果应为4。“ Smith”可以在main_list中检索3次。“ Roger可以被发现2次,但由于在“ Roger-
Smith”中已经找到“ Smith”,因此该数字不再计数,因此“ Roger”仅计为1,总共4个。

我写过的函数在下面,但是我认为有一种更快的方法可以做到:

def string_detection(master_list, main_list):
    count = 0
    for substring in master_list:
        temp = list(main_list)
        for string in temp:
            if substring in string:
                main_list.remove(string)
                count+=1
    return count

问题答案:

一班轮

>>>sum(any(m in L for m in master_list) for L in main_list)
4

遍历main_list并检查该字符串中是否any有来自的值master_list。这为您提供了布尔值列表。找到一个后它将停止,因此每个字符串的计数仅增加一个。方便地sum对所有Trues进行计数,即可算出计数。