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

Python 如何在从原始列表交换项目时创建列表列表?,python,python-3.x,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中创建类似的内容?我认为这会起作用 res = [a[:]] for i in range

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

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中创建类似的内容?

我认为这会起作用

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]

可以将嵌套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
    -th
  • [L0[j]
    j
    -th元素,我们使用
    j
    而不是
    i
    进行交换
  • L0[i+1:j]
    :从
    i+1
    -th到
    j-1
    -th的元素
  • [L0[i]
    i
    -第四个元素,我们使用
    i
    而不是
    j
    进行交换

使用标准库:itertools.permutations


您能否将您的第一次尝试与代码共享?