在列表的所有可能位置插入值
我想要打印出一个给定列表的所有可能结果,想知道怎么把一个值放到列表的不同位置。比如说,如果我的列表是 [A, B]
,我想把 X
插入到列表的所有可能位置,这样就能得到 [X, A, B]
、[A, X, B]
和 [A, B, X]
这些结果。
我在考虑用 range(len())
和一个循环来实现,但不知道该怎么开始。
7 个回答
5
如果你想把一个列表放进另一个列表里,可以这样做:
>>> 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]
95
使用 insert() 方法可以在指定位置之前插入一个元素。
比如,假设有
arr = ['A','B','C']
arr.insert(0,'D')
那么数组变成了 ['D','A','B','C']
,因为 D
被插入到了索引为 0 的位置之前。
接下来,对于
arr = ['A','B','C']
arr.insert(4,'D')
数组变成了 ['A','B','C','D']
,因为 D
被插入到了索引为 4 的位置之前(这个位置在数组的末尾之后)。
不过,如果你想生成一个数组的所有排列,Python 已经有现成的方法可以做到。它的 itertools 包里有一个排列生成器。
下面是一些示例代码:
import itertools
arr = ['A','B','C']
perms = itertools.permutations(arr)
for perm in perms:
print perm
这段代码会输出
('A', 'B', 'C')
('A', 'C', 'B')
('B', 'A', 'C')
('B', 'C', 'A')
('C', 'A', 'B')
('C', 'B', 'A')
22
你可以用下面这种方式来实现:
[mylist[i:] + [newelement] + mylist[:i] for i in xrange(len(mylist),-1,-1)]
用你的例子来说:
>>> 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']]