1
A
回答
8
def replace2inplace(lst):
lst[1::2], lst[::2] = lst[::2], lst[1::2]
本採用分片分配和切片步長交換每對在清單中,就地:
>>> somelst = [1, 2, 3, 4, 5, 6]
>>> replace2inplace(somelst)
>>> somelst
[2, 1, 4, 3, 6, 5]
否則,你可以使用一些技巧itertools
:
from itertools import izip, chain
def replace2copy(lst):
lst1, lst2 = tee(iter(lst), 2)
return list(chain.from_iterable(izip(lst[1::2], lst[::2])))
其給出:
>>> replace2([1, 2, 3, 4, 5, 6])
[2, 1, 4, 3, 6, 5]
與list()
呼叫可選的;如果你只需要循環的結果產生足夠:
from itertools import izip, chain, islice, tee
def replace2gen(lst):
lst1, lst2 = tee(iter(lst))
return chain.from_iterable(izip(islice(lst1, 1, None, 2), islice(lst2, None, None, 2)))
for i in replace2gen([1, 2, 3, 4, 5, 6]):
print i
其中replace2gen()
可以採取任意迭代器了。
+0
很不錯...... – Triptych 2013-04-09 15:49:10
0
外的地方版本:
def replace2(lst):
return [x for pair in zip(lst[1::2], lst[::2]) for x in pair]
0
我的選擇:
x = range(1,7)
res = [e for e in itertools.chain(*zip(x[1::2],x[0::2]))]
0
>>> a = [1, 2, 3, 4, 5, 6]
>>> sum([[x+1,x] for x in a if x&1 == True],[])
[2, 1, 4, 3, 6, 5]
編輯:請求一些進一步的解釋:
代碼步驟,通過各元素在列表中a
,如果元素是奇數(x&1 == True
)它將該元素和下一個元素以相反的順序放入列表中([x+1,x]
)。
隨着出sum(...,[])
功能,我們將不得不
[[2, 1], [4, 3], [6, 5]]
的sum(...,[])
功能通過使用列表的索引,而不是更普遍地刪除內部括號給
[2, 1, 4, 3, 6, 5]
這是可以做到其數值:
>>> a = [1, 2, 3, 4, 5, 6]
>>> sum([[a[x],a[x-1]] for x in range(len(a)) if x&1 == True],[])
[2, 1, 4, 3, 6, 5]
但是,如果長度不均勻,這將刪除列表的最後一個元素。
+1
你能解釋一下這個代碼嗎? – Korcholis 2013-04-09 16:28:38
相關問題
- 1. 交換兩個Python列表
- 2. python中的N-many列表的交集
- 3. Python中的n個交替1和-1的數組
- 4. 從(n)D陣列中選擇n-1個(n-1)D陣列
- 5. n列表的交集
- 6. 交換嵌套列表的Python 3
- 7. 擴展整數列表1 - 外的n個二進制列表
- 8. 多維Python列表的交換軸
- 9. Python(1..n)語法?
- 10. 在1個列表和1個元素之間交換數據信息
- 11. 交換兩個列表
- 12. 交換兩個子列表列表中
- 13. 在Python中列表中的元組/列表中交換值?
- 14. 硒Python的週期n + 1
- 15. 將1對n的XML列轉換爲表格數據
- 16. 在每個「\ n」中將1D列表轉換爲2D - Python
- 17. 如何矩陣矩陣轉換(N)(1,N)基體在python
- 18. 從列表中創建一個有1列和n行的DateFrame
- 19. 將python列表重新排列爲n個列表,列
- 20. 如何交換Python中的列表中的2個項目?
- 21. 交換列表項
- 22. 2的(N)= 1的(N-1)
- 23. 的Python - 交替列表
- 24. 適應的std ::交換接口交換n個字節
- 25. 在python列表中用兩個數字交換一個數字
- 26. Python:交換列表中的兩個字符串
- 27. 使用Python遞歸地從n到n-n + 1遞歸地查找n數到n-n + 1的乘積以降序排列的值使用Python
- 28. python:將1/0s列表轉換爲布爾值列表
- 29. 轉換1-d列表到2-d列表在Python
- 30. Python列表中的\ n索引
您是否需要處理有奇數個元素的情況? – Triptych 2013-04-09 15:50:23
這個問題應該是*用n + 1替換每個n值* – Surya 2013-04-09 15:50:50
在這裏有一個非常好的討論多個列表元素:http://stackoverflow.com/questions/5389507/iterating-over-every-two-elements -in-a-list – rongenre 2013-04-09 15:54:44