我想通過交換列表中的項目來生成列表的列表。我需要從列表中的每個項目開始交換一個。然後,我必須回到原始列表,並開始與每個項目交換兩個。例如。如何在從原始列表中交換項目時創建列表列表?
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?
我想通過交換列表中的項目來生成列表的列表。我需要從列表中的每個項目開始交換一個。然後,我必須回到原始列表,並開始與每個項目交換兩個。例如。如何在從原始列表中交換項目時創建列表列表?
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?
,我認爲這會工作
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]
可以使用嵌套與列表切片循環:
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
進行交換。使用標準庫:和itertools.permutations
https://docs.python.org/2/library/itertools.html#itertools.permutations
你可以分享你與你的代碼第一次嘗試? – Kyle