获取元素通过python中每个索引的列表?

时间:2013-07-11 16:04:16

标签: python list permutation

有点奇怪的要求。

假设我有以下列表:

[1,2,3]

我希望通过每个索引获得数字9,以获得以下列表列表:

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

知道如何轻松完成这项工作吗?还有,这种东西有名字吗?

编辑:我意识到我可以做以下事情:

lists=[]
for i in range(4):
  new_list = [1,2,3]
  new_list.insert(i,9)
  lists+=[new_list]

但我认为这不优雅。想法?

3 个答案:

答案 0 :(得分:6)

您可以执行类似

的操作
l = [1,2,3]
new_l = [l[:i] + [9] + l[i:] for i in range(len(l) + 1)]

答案 1 :(得分:3)

for循环怎么样:

l = [1,2,3]
res = []
for i in xrange(len(l)+1):
    l2 = l[:]
    l2.insert(i,9)
    res.append(l2)

这是我想到的另一件事:

l = [1,2,3]
q = [l[:] for _ in range(len(l)+1)]
map(lambda(x):x.insert(q.index(x),9), q)

然后q将包含您的列表:

print q
[9, 1, 2, 3], [1, 9, 2, 3], [1, 2, 9, 3], [1, 2, 3, 9]]

答案 2 :(得分:0)

enumeraterepeat是您的朋友。

from itertools import repeat

some_list = [1, 2, 3]
new_lists = []
new_elt = 9
for i, lst in enumerate(L[:] for L in repeat(some_list, len(some_list)+1))
    lst.insert(i, new_elt)
    new_lists.append(lst)

print new_lists