如何隔离笛卡尔积的特定行-Python

时间:2018-10-19 04:05:47

标签: python python-3.x

我已经创建了笛卡尔积,并使用以下代码进行了打印:

A = [0, 3, 5]
B = [5, 10, 15]    
C = product(A, B)

for n in C:
   print(n)

我们得到

(0, 5)
(0, 10)
(0, 15)
(3, 5)
(3, 10)
(3, 15)
(5, 5)
(5, 10)
(5, 15)

是否可以将笛卡尔积内每个集合的总和检查为目标值10?然后我们可以退还或留出匹配的集吗?

结果应为:

(0, 10)
(5, 5)

最后,如何计算所得子集中数字的频率,以显示0出现一次,10出现一次,5出现两次?我将不胜感激任何反馈或指导。

1 个答案:

答案 0 :(得分:0)

您可以像这样使用列表理解:

C = [p for p in product(A, B) if sum(p) == 10]

要计算元组中数字的频率(如@Amadan所建议的那样),可以在使用collections.Counter将子列表链接成一个序列之后使用itertools.chain.from_iterable

from collections import Counter
from itertools import chain
Counter(chain.from_iterable(C))
给出示例输入的

返回:

Counter({5: 2, 0: 1, 10: 1})

这是dict子类的实例,因此您可以遍历其项以输出:

for n, freq in Counter({5: 2, 0: 1, 10: 1}).items():
    print('{}: {}'.format(n, freq))