python itertools组合,包括自动关联

时间:2017-10-05 10:40:08

标签: python itertools

是否有优雅/ pythonic方法来检索两个列表元素的交叉和自动关联?

我可以手动执行此操作,但我想尝试使用itertools.combinations,默认情况下似乎不会产生自动关联[(1,1),(2,2)等]

这个问题实际上仅涉及交叉 - 相关:

Calculating correlations between every item in a list

尝试使用MWE:

import itertools
data = range(4); crosscorrs=[]
# Get the cross-correlations:
for (i,j) in itertools.combinations(data, 2):
    crosscorrs.append((i,j))
# How to get the auto-correlations?
# What about the (j,i) correlations even?!
# Result
print crosscorrs

甚至(j,i)相关性怎么样??

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

这个问题有很多问题,包括一段会引出Exception的示例代码,但我会尝试解决你似乎要问的问题。

当您将集合命名为“crosscorrs”时,我认为您需要单独的“交叉相关”索引和“自相关”索引列表。要获得(j,i)索引,您可以直接引用它们。可以将相同索引的东西添加到集合中,以避免重复。

from itertools import combinations
data = range(4)
crosscorrs=[]
autocorrs = set()

for (i,j) in combinations(data,2):
    crosscorrs.extend([(i,j),(j,i)])
    autocorrs.add((i,i))
    autocorrs.add((j,j))

print(crosscorrs, '\n')
print(list(autocorrs))

如果您希望所有这些都进入1个集合,请查看itertools.combinations_with_replacementdata data[::-1]后退的选项。很可能,set可以派上用场,因为它支持union次操作。

相关问题