数组内两两配对问题

数组内两两配对问题

有一个数组,想求出所有两两配对的情况,用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]]

]


回答:

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- 为高效循环创建迭代器的函数


回答:

这就是个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, [])


回答:

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

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]]]


回答:

想了半天,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]]

以上是 数组内两两配对问题 的全部内容, 来源链接: utcz.com/p/937756.html

回到顶部