Python中两个元组中元素之间的组合[重复]

Posted

技术标签:

【中文标题】Python中两个元组中元素之间的组合[重复]【英文标题】:Combinations between elements in two tuples in Python [duplicate] 【发布时间】:2015-09-16 04:29:04 【问题描述】:

我有两个元组:

t1 = ('A', 'B')
t2 = ('C', 'D', 'E')

我想知道如何在元组之间创建组合,所以结果应该是:

AC, AD, AE, BC, BD, BE

编辑

使用

list(itertools.combinations('abcd',2))

我可以为给定的字符串生成组合列表:

[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]

如果我插入元组而不是字符串,则会发生以下错误:

TypeError: sequence item 0: expected string, tuple found

有什么建议吗?

【问题讨论】:

如果您包括您的输入、您尝试过的内容、您的预期输出与您的实际输出以及完整的您收到的任何错误的堆栈跟踪。你也可以阅读this guide itertools 有它的东西 nCr 与此有​​什么关系? ^nCr 将列出来自 2 个集合的所有可能的值组合,因此非常适合。 啊,好吧,我明白了,这个问题实际上与仅计算计算量的数学 nCr 函数无关。有道理,是的,这可能是重复的。 【参考方案1】:

itertools.product 完全符合您的要求:

>>> import itertools
>>> t1 = ('A', 'B')
>>> t2 = ('C', 'D', 'E')
>>> list(itertools.product(t1, t2))
[('A', 'C'), ('A', 'D'), ('A', 'E'), ('B', 'C'), ('B', 'D'), ('B', 'E')]
>>> [''.join(x) for x in itertools.product(t1, t2)]
['AC', 'AD', 'AE', 'BC', 'BD', 'BE']

【讨论】:

【参考方案2】:
for value_one in t1:
    for value_two in t2:
        result = (str(value_one), str(value_two))
        print result

这不使用外部库。从字面上看,只有两个 for 循环和字符串连接。随意格式化输出。

看来您要么没有付出任何努力来找到这个答案,要么我误解了这个问题。

编辑:我看到您来自 R 背景,因此您可能不了解 Python 语法。请参阅 Python 基础指南;我相信他们会有很大帮助。如@Naman 所述,要保存循环中的值,您需要创建一个空列表和[list_name].append([value]) 所需的值,然后使用其他构造打印列表中的值。

【讨论】:

【参考方案3】:

这是我的简单方法:

for i in t1:
    for j in t2:
        print(i+j,end="")

这三行输入给出了上述组合。

【讨论】:

当 OP 可能不想打印时,最好不要依赖一点打印语法将它们连接在一起。 string.join 更好。【参考方案4】:
t = []
for x in t1:
    for y in t2:
        t.append(x+y)

t = tuple(t)

所以遍历两个元组,将每个组合附加到一个列表中,然后将列表转换回一个元组。

【讨论】:

只是想指出 range(0, len(t[#]) 在 Python 中是不必要的;你可以简单地使用列表/元组/字典/等。名称以遍历所有构造值。 你说得对。谢谢,我会解决的 投反对票的原因是什么?【参考方案5】:

您可以通过遍历两个元组来打印您想要的内容(或创建一个空列表并将您的输出存储在该列表中)

l = []
for c1 in t1:
    for c2 in t2:
        print c1 + c2 + ',',
        l.append(c1 + c2)

最后列表l 将包含输出元素。您可以通过

处理它的元素或制作它的元组
t = tuple(l)

【讨论】:

【参考方案6】:

所有可能的组合:

import itertools

t1 = ('A', 'B')
t2 = ('C', 'D', 'E')

print(tuple(itertools.combinations(t1 + t2, 2)))

输出:(('A', 'B'), ('A', 'C'), ('A', 'D'), ('A', 'E'), ('B', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'D'), ('C', 'E'), ('D', 'E'))

【讨论】:

我只需要元组之间的组合。知道如何删除其他人吗? @Andrej 更新了答案。

以上是关于Python中两个元组中元素之间的组合[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python基础(3) - 去掉列表或元组中的重复元素

python 元组操作总结

Python元组

在python 3中,如何创建一个元组,它是一个对象,元组中有多少个元素?它应作为函数参数有效[重复]

Python列表操作:将前任和后继组合到元组中

Python求解,,怎样求出元组中的各元素之和?