2017-09-18 106 views
0

我想通過交換列表中的項目來生成列表的列表。我需要從列表中的每個項目開始交換一個。然後,我必須回到原始列表,並開始與每個項目交換兩個。例如。如何在從原始列表中交換項目時創建列表列表?

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

然後,我開始從最初的名單L1

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

如何創建在Python這樣的交換2?

+5

你可以分享你與你的代碼第一次嘗試? – Kyle

回答

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

可以使用嵌套與列表切片循環:

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 element,我們使用j而不是i進行交換。
  • L0[i+1:j]:元素從i+1-j-1-th。
  • [L0[i]]i -th element,我們使用i而不是j進行交換。