0

私は2つのリストを持っています。果物の1つと、同じ長さであるが順序付けられていない番号の別の果物を言います。

例えば:

Fruits = ['apple', 'banana', 'pineapple', 'kiwifruit'],
Numbers = [3, 2, 4, 1]

最初に番号を割り当てるにはどうすればよいですか

  • アップルに3、
  • バナナに2、
  • 4パイナップルと
  • 1からキウイフルーツ

次に、新しい番号に従って注文しますか?

すなわち

sortedlist = ['kiwifruit', 'banana', 'apple', 'pineapple'].

これまでの試みには、列挙関数と並べ替え関数が含まれていましたが、割り当ててから並べ替えることができないようです。

4

5 に答える 5

10
sortedlist = [x[1] for x in sorted(zip(Numbers, Fruits))]
于 2012-12-03T05:35:37.933 に答える
0
Fruits = ['apple', 'banana', 'pineapple', 'kiwifruit'],
Numbers = [3, 2, 4, 1]
new = []
for x in range(len(Numbers)):
    new.append([Fruits[x],Numbers[x]])
new.sort(key=lambda x: x[1])
final = []
for x in new:
     final.append(x[0])

Finalは最終リストです

于 2015-03-23T16:35:38.553 に答える
0

割り当てはこのように行うことができます

In [25]: d = dict(zip(Numbers, Fruits))

In [26]: d
Out[26]: {1: 'kiwi', 2: 'banana', 3: 'apple', 4: 'pineapple'}

そして、辞書のキーに基づいてソートできます

In [27]: [d[i] for i in sorted(d.keys())]
Out[27]: ['kiwi', 'banana', 'apple', 'pineapple']
于 2012-12-03T05:36:55.070 に答える
0

numpyはこれでクールです

import numpy as np
fruits = np.array(['apple', 'banana', 'pineapple', 'kiwi'])
sorted_list = fruits[[2, 1, 3, 0]] #note its 0 based indexing ...
print sorted_list
于 2012-12-03T05:38:04.590 に答える
0

どうですか:

Fruits = ['apple', 'banana', 'pineapple', 'kiwi']
Numbers = [3, 2, 4, 1]

New_Fruits = [ Fruits[idx-1] for idx in Numbers ]

これは、インデックス リスト ( Numbers) が連続した整数であるためのみ機能します。の場合は、もう少しきれいになりますNumbers = [ 2, 1, 3, 0 ]

利点は、への呼び出しを回避することですzip。そのため、もう少し効率的かもしれません。欠点は、一般性が低いことです。それが機能するには、適切なインデックス リストが必要です。

于 2012-12-03T05:42:04.697 に答える