我有两个清单:
bigList = [["A1.1", "A2.1", "A3.1", "A4.1"], ["A3.1", "A4.1", "A5.1"], ["A4.1", "A5.1"]]
smallList = ["A4.1", "A5.1"]
Python中最快的方法是计算bigList
(列表)包含smallList
的次数。
目前,正确答案是2。 也许我应该使用Numpy数组?
答案 0 :(得分:1)
您可以使用set方法issubset
:
语法:
A.issubset(B)
从issubset()返回值
issubset()返回
True if A is a subset of B
False if A is not a subset of B
bigList = [["A1.1", "A2.1", "A3.1", "A4.1"], ["A3.1", "A4.1", "A5.1"], ["A4.1", "A5.1"]]
smallList = ["A4.1", "A5.1"]
count={}
track=1
for sub_list in bigList:
if set(smallList).issubset(sub_list):
if tuple(smallList) not in count:
count[tuple(smallList)]=track
else:
count[tuple(smallList)]+=1
print(count)
输出:
{('A4.1', 'A5.1'): 2}
答案 1 :(得分:0)
要检查列表是否完全包含其他列表,我们可以使用集合比较:
set(smallerList) <= set(biggerList)
如果True
的所有元素都包含在smallerList
的集合中,则会返回biggerList
。请注意,此方法检查是否包含单个项目而不是订单 - 哪些集合不考虑。因此,如果序列顺序很重要,则无法使用它。
从这里我们可以使用简单的列表理解来检查bigList
的所有集合并应用上述检查。然后我们只sum
增加包含较小集合的集合数量(如果是匹配则我们加1,否则加0)。
count = sum([1 if set(smallList) <= set(bigList) else 0 for x in bigList])
正如 N指出的那样。 Ivanov - 这将根据bigList
中包含的子列表的数量线性扩展。