2016-10-19 16 views
0

我在計算如何在長列表中切換數字時遇到了一些麻煩。如何切換列表中的值以打印列表的交替版本?

例如,如果是具有列表:

numbers = [1,2,3,4,5,6,7,8] 

,並希望代替打印的形式:

numbers_2 = [2,1,4,3,6,5,8,7] 

使得每對將被切換,利用換循環。我想過做類似這樣的事情:

for i in range(0, len(numbers), 2): 

但是沒有真正得到更多。

+0

打印它,或實際上重新排列它? – ShadowRanger

回答

0

循環每秒指數和交換兩個相鄰的項目:

numbers = [1,2,3,4,5,6,7,8] 
for i in range(1, len(numbers), 2): 
    numbers[i-1], numbers[i] = numbers[i], numbers[i-1] 

不能確定其他的答案,但是這個也會使用不均勻長度的列表,並且保持最後的項目不變。

0

試試這個:

def swap_array_elements (a): 
    for i in range (0, len(a) - 1, 2): 
     a[i], a[i +1] = a[i + 1], a[i] 
    return a 

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
print (swap_array_elements (a)) 
# prints: [1, 0, 3, 2, 5, 4, 7, 6, 9, 8] 
+1

python可以讓你編寫比這更好的交換代碼:'a [i],a [i + 1] = a [i + 1],[i]' – njzk2

+1

以及更好的循環: len(a),2):' – njzk2

+0

你是絕對正確的,@ njzk2。謝謝。 – erapert

0

取兩半,並重新安排他們:

numbers = [1,2,3,4,5,6,7,8] 
first = numbers[::2] 
second = numbers[1::2] 
numbers_2 = sum(map(list, zip(second, first)), []) 
+0

把每一個其他元素放入兩個列表(賠率和均勻度),然後將它們壓縮......聰明。但是,如果列表長度不均勻,是否不會刪除列表中的最後一項? – erapert

+0

這就省略了最後一個數字,例如'numbers = [1,2,3,4,5,6,7,8,9]' – mkj

+1

@mkj這個問題的行爲沒有被指定。 – njzk2