python - 收缩两个不同列表中的元素

标签 python matlab wolfram-mathematica

我有两个不同的列表list1 = ['A','B']list2 = ['C','D','E']。我希望能够找到两个列表的元素之间所有可能的收缩。对于本例,我希望有一个代码(最好是 Python、Mathematica 或 MATLAB)来获取上面的列表并返回:

AC,BDAC、BEAD、BCAD、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

请注意,为了简短起见,我没有构建项目列表,而是直接迭代字符串。两个列表中的哪一个获得排列以及哪一个获得组合并不重要,这只是改变输出的顺序。 排列采用所有可能的顺序,而组合返回排序的顺序。这样,您每次宫缩都恰好一次。

对于每个收缩,您将得到两个序列 s1s2,收缩发生在每个序列中相似索引的元素之间。 ','.join(a+b for a,b in zip(s1,s2)) 为这种收缩提供了一个很好的字符串。

关于python - 收缩两个不同列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26667569/

相关文章:

python - 如何提示 Sympy 逆高斯方程的积分

python - 如何使用两个 Django 身份验证后端并根据使用的后端提供不同的访问权限?

c++ - 将具有 OO 语法的 Matlab 转换为 c/c++ 而无需重写其功能

matlab - Matlab R2015使用GPU吗?

wolfram-mathematica - 加快 ListLinePlot 速度

macros - 数学 : Unevaluated vs Defer vs Hold vs HoldForm vs HoldAllComplete vs etc etc

python - 按原样将字符串转换为字节对象

python - 在系统范围内安装 pip 和 virtualenv 的官方 "preferred"方式是什么?

python - 具有表面渐变的颜色 matplotlib plot_surface 命令

javascript - 从单个方程输出/生成一组点 - Python、JS、Matlab