如何在从原始列表中交换项目时创建列表列表?

时间:2017-09-18 23:36:07

标签: python python-3.x

我想通过交换列表中的项目来生成列表列表。我需要先从列表中的每个项目交换一个。然后我必须回到原始列表并开始与每个项目交换两个。例如。

L0 = [1, 2, 3, 4]
L1 = [2, 1, 3, 4]
L2 = [3, 2, 1, 4]
L3 = [4, 2, 3, 1]

然后我开始从原始列表L1

交换2
L4 = [1, 3, 2, 4]
L5 = [1, 4, 3, 2]

如何在python中创建这样的东西?

3 个答案:

答案 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)