我试图打印给定列表的所有可能结果,我想知道如何将值放入列表中的各个位置.例如,如果我的名单是[A,B]
,我要插入X
到列表中,以便它将返回这个的所有可能的指数[X,A,B]
,[A,X,B]
,[A,B,X]
.
我正在考虑使用range(len())
和for循环,但不知道如何开始.
Jus*_*eel 87
使用insert()在给定位置之前插入元素.
例如,有
arr = ['A','B','C']
arr.insert(0,'D')
Run Code Online (Sandbox Code Playgroud)
arr变为['D','A','B','C'],因为'D'插入到索引0处的元素之前.
现在,为
arr = ['A','B','C']
arr.insert(4,'D')
Run Code Online (Sandbox Code Playgroud)
arr变为['A','B','C','D'],因为'D'插在索引4处的元素之前(超出数组末尾的1).
但是,如果您希望生成数组的所有排列,那么有很多方法可以在Python中构建.itertools包有一个置换生成器.
这是一些示例代码:
import itertools
arr = ['A','B','C']
perms = itertools.permutations(arr)
for perm in perms:
print perm
Run Code Online (Sandbox Code Playgroud)
将打印出来
('A', 'B', 'C')
('A', 'C', 'B')
('B', 'A', 'C')
('B', 'C', 'A')
('C', 'A', 'B')
('C', 'B', 'A')
Run Code Online (Sandbox Code Playgroud)
Dav*_*ill 21
您可以使用以下列表理解来执行此操作:
[mylist[i:] + [newelement] + mylist[:i] for i in xrange(len(mylist),-1,-1)]
Run Code Online (Sandbox Code Playgroud)
用你的例子:
>>> mylist=['A','B']
>>> newelement='X'
>>> [mylist[i:] + [newelement] + mylist[:i] for i in xrange(len(mylist),-1,-1)]
[['X', 'A', 'B'], ['B', 'X', 'A'], ['A', 'B', 'X']]
Run Code Online (Sandbox Code Playgroud)
如果要在列表中插入列表,可以执行以下操作:
>>> a = [1,2,3,4,5]
>>> for x in reversed(['a','b','c']): a.insert(2,x)
>>> a
[1, 2, 'a', 'b', 'c', 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)