1

リスト A とリスト B には対応する要素があります。

A = ['a','c','b']
B = [5,7,9]

A の要素を並べ替え (以下のように A_sorted を取得する)、B の値を変更しない (以下のように B_sorted を取得する) 方法は?

A_sorted = A.sort()

A_sorted = ['a','b','c']
B_sorted = [5,9,7]
4

3 に答える 3

5
A = ['a','c','b']
B = [5,7,4]

A_sorted, B_sorted = zip(*sorted(zip(A, B))

結果:

>>> A_sorted
('a', 'b', 'c')
>>> B_sorted
(5, 4, 7)

説明:

>>> step_1 = zip(A,B) # creates list of tuples using 
                      # two original lists 
                      # tuples will allow us to keep correspondence 
                      # between A and B   
>>> step_1
[('a', 5), ('c', 7), ('b', 4)]
>>> step_2 = sorted(step_1) # key step: the tuples are sorted by
                            # the first value.                                  
>>> step_2
[('a', 5), ('b', 4), ('c', 7)]
>>> step_3 = zip(*step_2)   # This is just a trick to get back the original
                            # "lists", however they are actually tuples
>>> step_3
[('a', 'b', 'c'), (5, 4, 7)]
于 2013-11-10T02:41:56.670 に答える
1

質問にタグが付けられているため、厄介な解決策です。使用argsort:

s = A.argsort()
A_sorted = A[s]
B_sorted = B[s]

使い方:

A = np.array(['a', 'c', 'b'])
B = np.array([5, 7, 9])

s = A.argsort()  # returns the _indices_ that would sort A
print s
# array([0, 2, 1])

を使用して、またはsからソートされたリストを、をソートする順序で取得できます。ABA

A[s]
# array(['a', 'b', 'c'], 
#       dtype='|S1')

B[s]
# array([5, 9, 7])
于 2013-11-11T04:29:07.693 に答える
0

このlist.sort()関数はソートされたリストを返しませんが、リストをその場でソートします。したがって、 が返さNoneれるので、 に設定A_sortedしていNoneます。

ここには 2 つのオプションがあります。

  • 使用するsorted()場所で使用してくださいA.sort()。これはリストをソートしますが、ソートされたリストも返します。

  • 何にも割り当てないでくださいA.sort()

あなたが探していると思うのは、 andを変更せずにA_sortedandを作成することです。次に、ここで使用します:B_sortedABsorted()

A_sorted = sorted(A)
B_sorted = sorted(B)
于 2013-11-10T02:39:07.487 に答える