有沒有更好的方法來隨機洗牌兩個相關的列表,而不會破壞其他列表中的通信?我在numpy.array
和c#
中發現了相關的問題,但不完全一樣。更好的方式來洗牌兩個相關的列表
作爲第一次嘗試,一個簡單的zip
招會做:
import random
a = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
b = [2, 4, 6, 8, 10]
c = zip(a, b)
random.shuffle(c)
a = [e[0] for e in c]
b = [e[1] for e in c]
print a
print b
它會得到輸出:
[[1, 2], [7, 8], [3, 4], [5, 6], [9, 10]]
[2, 8, 4, 6, 10]
只是覺得有點彆扭。而且它也需要一個額外的列表。
您可以用'zip'解壓名單,以及:'A,B = ZIP(* C)' – mgilson 2012-08-01 18:16:07
我也一般不推薦方案設計你需要保留一組平行列表的地方。只保留1個列表。創建某種類或某些內容來統一數據。 – mgilson 2012-08-01 18:19:02
如果你想用'numpy'做這樣的工作,這裏是一個很好的解決方案:http://stackoverflow.com/questions/4601373/better-way-to-shuffle-two-numpy-arrays-in-unison – Mithril 2016-04-14 08:24:58