在Python中将值插入列表中的特定位置

Dan*_*Dan 37 python list

我试图打印给定列表的所有可能结果,我想知道如何将值放入列表中的各个位置.例如,如果我的名单是[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)

  • range会一次生成序列中的每个数字,并在列表中返回这些数字.xrange根据您的需要生成*范围内的每个数字*.因此,xrange使用较少的内存(如果序列非常大则少得多).因此,除非你真的需要所有数字,否则xrange会更有效率.你建议的代码也可以解决问题.(尽管您可能希望对在for循环体中构造的列表执行某些操作). (2认同)

Jan*_*sen 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]
Run Code Online (Sandbox Code Playgroud)