a = [2,7,9]
b = [[7,9],[1,2],[2,9]]
列表[a]
中有多少对与配对元组[b]
匹配
请注意列表[7,9]
中的[2,9]
和[a]
对。即使对[1,2]
包含2
的数字,也不会对其进行计数,因为这两个数字都不在列表[a]
中。
返回值应为2,匹配对的len。
len(filter(lambda l:if_in(b,l),a))
需要帮助创建if_in函数或更简单的方法来编写此函数。无论a
或b
的大小如何,我如何才能使此功能正常工作。
答案 0 :(得分:6)
设置a
一套并使用set.issuperset,检查a
是否为每个子列表的superset
:
a = [2,7,9]
b = [[7,9],[1,2],[2,9]]
st = set(a)
print(sum(st.issuperset(sub) for sub in b))
2
您可以采用两种方式,或者制作所有子列表集,或者如上所述只创建一个集合,当a是子列表的超集时,则子列表是a的子集:
In [6]: a = [2,7,9]
In [7]: b = [[7,9],[1,2],[2,9]]
In [8]: st = set(b[0])
In [9]: st.issubset(a)
Out[9]: True
In [10]: st = set(b[1])
In [11]: st.issubset(a)
Out[11]: False
In [13]: st = set(a)
In [13]: st.issuperset(b[0])
Out[13]: True
In [14]: st.issuperset(b[1])
Out[14]: False
显然,由于列表中只有少数数字,因此从a和使用超集制作集合更有意义。
答案 1 :(得分:0)
如果要使用a的子集,可以使用itertools.combinations(iterable,r)。 引用文档,返回输入可迭代元素的r长度子序列。
from itertools import combinations
a = [2, 7, 9]
b = [(7, 9), (1, 2), (2, 9)]
# combinations returns a collection of tuples
# so changed your b items to tuples.
len(filter(lambda x: x in b, combinations(a ,2))