Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何分配数组元素_Python_Python 3.x_Python 2.7 - Fatal编程技术网

Python 如何分配数组元素

Python 如何分配数组元素,python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,我有一个数组: A=[1,2,3] 我想在两个人中分发这些元素,并想使用python**打印所有可能的组合 例如: [(1,2)(3)] ,[(1)(2,3)].... 这里第一个得到1,2,第二个得到3 在第二个组合中,第一个得到1,第二个得到2,3 更重要的是: 如果[2,3][1]是一个组合,那么[1][2,3]也是一个不同的组合,我们也必须打印它 我想得到所有这些组合 EDIT 1- For better understanding i am adding one more exa

我有一个数组:

A=[1,2,3]
我想在两个人中分发这些元素,并想使用python**打印所有可能的组合

例如:

[(1,2)(3)] ,[(1)(2,3)]....
这里第一个得到1,2,第二个得到3

在第二个组合中,第一个得到1,第二个得到2,3

更重要的是:

如果
[2,3][1]
是一个组合,那么
[1][2,3]
也是一个不同的组合,我们也必须打印它

我想得到所有这些组合

EDIT 1-  For better understanding i am adding one more example.

A=[ 1,2,3] 

 Here is the all  desired combination.
[
[] , [1,2,3]
[1,2,3] ,[]
[1], [2, 3]
[2, 3], [1]
[1, 2], [3]
[3], [1, 2]
[2], [1, 3]
[1, 3], [2] ]
你可以用

编辑:要获得相反的顺序,您可以执行以下操作:

>>> for item in set_partitions(A, 2):
    print(item)
    print(list(reversed(item)))
印刷品:

[[1], [2, 3]]
[[2, 3], [1]]
[[1, 2], [3]]
[[3], [1, 2]]
[[2], [1, 3]]
[[1, 3], [2]]

我必须预先说明这一点,并说它不是非常优化,但是它非常稳定,应该可以使用任意长度的
a

from itertools import chain, permutations
from  pprint import pprint

def devider(x):
    dev = round(len(x)/2)
    return x[:dev], x[dev:]

def sorter(x):
    r = []
    for i in x:
        if isinstance(i, tuple):
            r.extend(list(i))
        else:
            r.append(i)
    return r

a = [1, 2, 3]
x = list(set(chain(*[[i, i[::-1]] for i in map(devider, permutations(a))])))
pprint(sorted(x, key=sorter))
输出:

[((1, 2), (3,)),
 ((1,), (2, 3)),
 ((1, 3), (2,)),
 ((1,), (3, 2)),
 ((2,), (1, 3)),
 ((2, 1), (3,)),
 ((2,), (3, 1)),
 ((2, 3), (1,)),
 ((3,), (1, 2)),
 ((3, 1), (2,)),
 ((3, 2), (1,)),
 ((3,), (2, 1))]
pprint
模块和
sorter
功能仅用于表示目的,因此更容易看到每个想要的排列都被表示出来


如果要包括
((1,2,3),())
((),(1,2,3))
,只需手动执行并使用
列表。扩展
方法将它们添加到列表中:

z = [(tuple(a), ()), ((), tuple(a))]
x.extend(z)

是否每个阵法的长度为3,每次只有2人?@Jab阵法的长度不是固定的,但每次只能分布在两人之间。是否允许混淆阵法的顺序?例如:
[1,2,3,4]
->
[1,4]
[2,3]
?@Jab yes。我还想补充的一点是,对于[1,2,3,4]->[1,4],[2,3]是一个组合,那么[2,3][1,4]也将作为一个组合打印。问题是,如果[2,3][1]是一个组合,那么[1][2,3]是另一个组合,我们也必须打印出来。@Akash nitter我编辑了回复以包括这个案例。嘿,兄弟,谢谢,但你的回答只是按相反的顺序打印。但是我希望这个组合在同一个列表中,这样就可以访问这些组合。@Akash nitter只需将它们附加到列表中,而不是直接打印它们。很抱歉,我想你没有收到我的问题。输出将是[[],[1,2,3][1,2,3],[1],[2,3][2,3],[1][1,2][2],[1,3][1,3],[2]]元素的位置变化不会被视为combination@Akashnitter我已经更新了答案,试图包括独家版本以及。这更像你想要的方式吗?
z = [(tuple(a), ()), ((), tuple(a))]
x.extend(z)