数组内两两配对问题

发布于 2022-09-12 00:56:28 字数 398 浏览 11 评论 0

有一个数组,想求出所有两两配对的情况,用python怎么写比较优雅
比如输入数组是[1,2,3,4]

  • 情况1
    1和2配对,3和4配对
  • 情况2
    1和3配对,2和4配对
  • 情况3
    1和4配对,2和3配对

把这三种情况都求出来,两两配对没有先后顺序


  • 输入
a=[1,2,3,4]
  • 输出
[  
    [[1, 2], [3, 4]],  
    [[1, 3], [2, 4]],  
    [[1, 4], [2, 3]]
]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

作业与我同在 2022-09-19 00:56:28
from itertools import combinations
print(list(combinations([1,2,3,4],2)))        #->[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]

  • 出处

    • 《python cookbook》4.9 排列组合的迭代
    • 《Python3.6.5标准库文档》10.1 itertools- 为高效循环创建迭代器的函数
风渺 2022-09-19 00:56:28

这就是个dfs

ans = []
lst = [1,2,3,4]

def dfs(lst, tmp):
    if 2 == len(tmp):
        ans.append(tmp)
        return
    for i in range(len(lst)):
        dfs(lst[i+1:], tmp + [lst[i]])
dfs(lst, [])
墨离汐 2022-09-19 00:56:28

不知道怎么才算比较优雅,试了一下可以这样:

def dfs(ls, r=2):
    c = []
    rs = []
    for x in itertools.combinations(ls, r):
        c.append(list(x))
    for i, j in itertools.combinations(c, r=2):
        x_set = set()
        x_set.update(i)
        x_set.update(j)
        x_rs = []
        if len(ls) == len(x_set):
            x_rs.append(i)
            x_rs.append(j)
            rs.append(x_rs)
    return rs


print("[1, 2, 3, 4]的结果=>", dfs(ls=[1, 2, 3, 4], r=2))
print("[1, 2, 3, 4, 5, 6]的结果=>", dfs(ls=[1, 2, 3, 4, 5, 6], r=3))

结果:

[1, 2, 3, 4]的结果=> [[[1, 2], [3, 4]], [[1, 3], [2, 4]], [[1, 4], [2, 3]]]
[1, 2, 3, 4, 5, 6]的结果=> [[[1, 2, 3], [4, 5, 6]], [[1, 2, 4], [3, 5, 6]], [[1, 2, 5], [3, 4, 6]], [[1, 2, 6], [3, 4, 5]], [[1, 3, 4], [2, 5, 6]], [[1, 3, 5], [2, 4, 6]], [[1, 3, 6], [2, 4, 5]], [[1, 4, 5], [2, 3, 6]], [[1, 4, 6], [2, 3, 5]], [[1, 5, 6], [2, 3, 4]]]
坏尐絯 2022-09-19 00:56:28

想了半天,for语句不知道怎么去掉,有点不优雅。

a = [1, 2, 3, 4]  
b = []  
  
for i in range(1, len(a)):  
    b += zip(a[:-i], a[i:])  
  
b = [list(item) for item in b]  
  
print(b)

不知道结果是否符合要求。

[[1, 2], [2, 3], [3, 4], [1, 3], [2, 4], [1, 4]]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文