gpt4 book ai didi

python - 在计算重复项时,如何在 Python 中确定一个列表是否是另一个列表的子列表

转载 作者:行者123 更新时间:2023-12-05 04:26:38 24 4
gpt4 key购买 nike

我目前正在尝试确定一个字符串列表是否是另一个字符串列表的有效子列表。这个问题之前已经被问过很多次,但我还没有看到列表或子列表包含重复项的解决方案。

假设字母列表是 ['A', 'B', 'C', 'D'],单词是 ['A', 'B', 'C']。有很多方法可以检查单词是否是一个有效的子列表。但是如果这个词是 ['A', 'B', 'C', 'C'],我需要输出返回这个词是一个无效的子列表,因为列表中没有两个可用的“C”字母。这意味着使用 all() 函数和集合不起作用,因为它们没有正确检查重复项。

我也尝试过使用某种跟踪器和 string.rfind() 来查看子列表中的所有字母是否都是列表中的字母,但这也失败了。这是我试过的代码:

def firstFilter(dictionary, board):
initFilter = []
for word in dictionary:
tracker = 0
if 3 <= word <= 16:
for j in range(len(board)):
for k in range(len(board[j])):
letter = board[j][k]
check = word.rfind(letter)
if check != -1:
tracker += 1
if tracker >= len(word):
initFilter.append(word)
initFilter = sorted(initFilter, key=len, reverse=True)
print('Words available:', len(initFilter))
return initFilter

此代码检查字母列表中的每个字母,以查看是否在单词中找到该字母,其中完整的字母列表是列表,每个单词是子列表。但是这种方法也有一个问题。如果完整的字母列表中有重复项,则跟踪器比单词的长度长。例如,如果字母列表是 ['A', 'B', 'C', 'C'] 并且单词是 ['A', 'B', 'C'],那么跟踪器取值 4 并且单词的长度是 3。这就是我使用 >= 而不是 == 的原因。

但是如果字母列表是 ['A', 'B', 'C', 'C'] 并且单词列表是并且单词是 ['A', 'B', 'C ','D']。字母列表中的重复字母导致跟踪器取值 4,单词长度为 4,因此代码返回该单词是字母列表的有效子列表,即使字母列表中没有 'D' .

有什么办法可以避免这两个问题?我是一名新手 Python 程序员,但我无法从该站点上过去的问题中找到任何帮助,因为当列表和/或子列表包含重复项时,我找不到解决这两个重复问题的问题。

最佳答案

您可以使用 collections.Counter ,通过从小计数器中减去大计数器。如果输出不为空,则 small 不是子集:

def issubset_replicate(A, B):
'''check if A is a subset of B'''
from collections import Counter
return Counter(A) - Counter(B) == Counter()

issubset_replicate('ABC', 'ABCCD')
# True

issubset_replicate('ABCCC', 'ABCCD')
# False

issubset_replicate('ABE', 'ABCCD')
# False

它是如何工作的?

当减去两个计数器时,如果一个值变为空或负数,则删除该键。因此 A 是 B 的子集,考虑到重复,Counter(A) - Counter(B) 应该为 null。

关于python - 在计算重复项时,如何在 Python 中确定一个列表是否是另一个列表的子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73014224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com