我想通过交换列表中的项目来生成列表列表。我需要先从列表中的每个项目交换一个。然后我必须回到原始列表并开始与每个项目交换两个。例如。
L0 = [1, 2, 3, 4]
L1 = [2, 1, 3, 4]
L2 = [3, 2, 1, 4]
L3 = [4, 2, 3, 1]
然后我开始从原始列表L1
交换2L4 = [1, 3, 2, 4]
L5 = [1, 4, 3, 2]
如何在python中创建这样的东西?
答案 0 :(得分:1)
您可以使用带有列表切片的嵌套for循环:
L0 = [1, 2, 3, 4]
res = []
for i in range(len(L0) - 1):
for j in range(i + 1, len(L0)):
swappedList = L0[:i] + [L0[j]] + L0[i+1:j] + [L0[i]] + L0[j+1:]
res.append(swappedList)
print(res)
输出:
[[2, 1, 3, 4], [3, 2, 1, 4], [4, 2, 3, 1], [1, 3, 2, 4], [1, 4, 3, 2], [1, 2, 4, 3]]
一点解释:
L0[:i]
:从第一个到i-1
- [L0[j]]
:j
- 元素,我们使用j
而不是i
进行交换。L0[i+1:j]
:从i+1
- 到j-1
- 的元素。[L0[i]]
:i
- 元素,我们使用i
而不是j
进行交换。答案 1 :(得分:0)
我认为这会起作用
res = [a[:]]
for i in range(len(a)):
for j in range(i+1, len(a)):
a[i], a[j] = a[j], a[i]
res.append(a[:])
a[i], a[j] = a[j], a[i]
答案 2 :(得分:0)
使用标准库:itertools.permutations
https://docs.python.org/2/library/itertools.html#itertools.permutations