天天看點

python list map成員排序_python – 同時對多個清單進行排序

簡短的回答

a_s, b_s, c_s = map(list, zip(*sorted(zip(a, b, c), reverse=True)))

答案很長

首先,您必須壓縮三個清單,建立一個項目清單:

>>> a = [0.3, 1.5, 0.2, 2.6]

>>> b = [1, 2, 3, 4]

>>> c = [0.01, 0.02, 0.03, 0.04]

>>> z = zip(a, b, c)

>>> z

[(0.3, 1, 0.01), (1.5, 2, 0.02), (0.2, 3, 0.03), (2.6, 4, 0.04)]

然後,您對此清單進行排序.元組清單按其第一個元素排序(當第一個元素相等,第二個元素使用時,依此類推):

>>> zs = sorted(z, reverse=True)

>>> zs

[(2.6, 4, 0.04), (1.5, 2, 0.02), (0.3, 1, 0.01), (0.2, 3, 0.03)]

然後你“解壓縮”清單.解壓縮與使用每個元組作為參數調用zip相同,這是通過使用星形文法實作的:

>>> u = zip(*zs)

>>> u

[(2.6, 1.5, 0.3, 0.2), (4, 2, 1, 3), (0.04, 0.02, 0.01, 0.03)]

你得到一個元組清單,但你想要清單.是以,您将清單構造函數映射到以下項目:

>>> u

[(2.6, 1.5, 0.3, 0.2), (4, 2, 1, 3), (0.04, 0.02, 0.01, 0.03)]

>>> map(list, u)

[[2.6, 1.5, 0.3, 0.2], [4, 2, 1, 3], [0.04, 0.02, 0.01, 0.03]]

然後,您可以将清單解壓縮到變量中:

>>> a_s, b_s, c_s = map(list, u)

意見

排序時,您可以明确指出将用于排序的項目,而不是依賴于元組的預設排序:

>>> from operator import itemgetter

>>> sorted(z, key=itemgetter(1)) # Sort by second item

[(0.3, 1, 0.01), (1.5, 2, 0.02), (0.2, 3, 0.03), (2.6, 4, 0.04)]

>>> sorted(z, key=itemgetter(2)) # Sort by third item

[(0.3, 1, 0.01), (1.5, 2, 0.02), (0.2, 3, 0.03), (2.6, 4, 0.04)]