列表中的对元素计数

时间:2015-12-01 13:58:47

标签: python

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函数或更简单的方法来编写此函数。无论ab的大小如何,我如何才能使此功能正常工作。

2 个答案:

答案 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))