我有两个不同的列表list1 = ['A','B']
和list2 = ['C','D','E']
。我希望能够找到两个列表的元素之间所有可能的收缩。对于本例,我希望有一个代码(最好是 Python、Mathematica 或 MATLAB)来获取上面的列表并返回:
AC,BD
、AC、BE
、AD、BC
、AD、BE
、 AE,BC
, AE,BD
这是所有可能的缩写。我希望能够对可变大小的列表(但总是其中两个)执行此操作。我经常使用 Python 的 itertools,但我无法掌握它如何处理两个列表。任何帮助将非常感激。
最佳答案
这是我的版本:
import itertools
l1 = 'AB'
l2 = 'CDE'
n = min(len(l1),len(l2))
print('; '.join(
','.join(a+b for a,b in zip(s1,s2))
for s1,s2 in itertools.product(
itertools.permutations(l1,n),
itertools.combinations(l2,n),
)
))
这将输出:
AC,BD; AC,BE; AD,BE; BC,AD; BC,AE; BD,AE
请注意,为了简短起见,我没有构建项目列表,而是直接迭代字符串。两个列表中的哪一个获得排列
以及哪一个获得组合
并不重要,这只是改变输出的顺序。 排列
采用所有可能的顺序,而组合
返回排序的顺序。这样,您每次宫缩都恰好一次。
对于每个收缩,您将得到两个序列 s1
和 s2
,收缩发生在每个序列中相似索引的元素之间。 ','.join(a+b for a,b in zip(s1,s2))
为这种收缩提供了一个很好的字符串。
关于python - 收缩两个不同列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26667569/