2

有点奇怪的要求。

假设我有以下列表:

[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]

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

4

3 回答 3

6

你可以做类似的事情

l = [1,2,3]
new_l = [l[:i] + [9] + l[i:] for i in range(len(l) + 1)]
于 2013-07-11T16:09:54.290 回答
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]]
于 2013-07-11T16:07:59.750 回答
0

枚举重复是你的朋友。

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
于 2013-07-11T16:40:10.927 回答