3

たとえば、私はのリストを持っているでしょう

lists = ['jack 20', 'ben 10', 'alisdar 50', 'ollie 35']

数に基づいて並べ替える必要があります。

lists.sort() = ['ben 10', 'jack 20', 'ollie 35', 'alisdar 50']

どういうわけかsplit()でフォーマットを使用することは可能ですか?

4

3 に答える 3

13

関数を使用しkeyます:

lists.sort(key=lambda s: int(s.rsplit(None, 1)[-1]))

呼び出し可能オブジェクトは、のkeyすべての要素に渡されlists、その要素は戻り値に従ってソートされます。この場合、

  • 右側から始めて、空白で1回分割します
  • 分割の最後の要素を取ります
  • それを整数に変換します

toの引数keyは任意の呼び出し可能ですが、ラムダはよりコンパクトです。コマンドプロンプトで試すことができます。

>>> key_function = lambda s: int(s.rsplit(None, 1)[-1])
>>> key_function('ben 10')
10
>>> key_function('Guido van Rossum 42')
42

実際、値を並べ替えると、その関数の戻り値が追加され、並べ替えられる内容は次のようになります。

[(20, 0, 'jack 20'), (10, 1, 'ben 10'), (50, 2, 'alisdar 50'), (35, 3, 'ollie 35')]

代わりに(2番目の値である要素のインデックスを追加して、ソートキーが等しい場合に元の順序を維持します)。

結果:

>>> lists = ['jack 20', 'ben 10', 'alisdar 50', 'ollie 35']
>>> lists.sort(key=lambda s: int(s.rsplit(None, 1)[-1]))
>>> lists
['ben 10', 'jack 20', 'ollie 35', 'alisdar 50']
于 2013-03-26T17:42:08.787 に答える
3

必要なことを実行する関数を使用しkeyます。

lists.sort(key=lambda e: int(e.split()[1]))

一部のアイテムがその形式に従わない場合は、もう少し手の込んだものを書く必要があります。

于 2013-03-26T17:41:38.603 に答える
1

たとえば、人の名前や年齢を表す文字列よりも適切なデータ型があればよいでしょう。1つの方法は辞書です:

lists = ['jack 20', 'ben 10', 'alisdar 50', 'ollie 35']
d = dict(item.split(' ') for item in lists)

これにより、2要素リストのストリームから辞書が作成されます。

次に、次のように並べ替えることができます。

print sorted((v, k) for k, v in d.iteritems())

そしてこれを入手してください:

>>> lists = ['jack 20', 'ben 10', 'alisdar 50', 'ollie 35']
>>> d = dict(item.split(' ') for item in lists)
>>> print sorted((v, k) for k, v in d.iteritems())
[('10', 'ben'), ('20', 'jack'), ('35', 'ollie'), ('50', 'alisdar')]

または、年齢を整数に変換することもできます。

>>> lists = ['jack 20', 'ben 10', 'alisdar 50', 'ollie 35']
>>> person_iter = (item.split(' ') for item in lists)
>>> d = {k: int(v) for k, v in person_iter}
>>> print sorted((v, k) for k, v in d.iteritems())
[(10, 'ben'), (20, 'jack'), (35, 'ollie'), (50, 'alisdar')]

person_itername-ageのペアを生成するジェネレータです。それを辞書の理解にフィードし、2番目の引数を整数に変換します。

ただし、基本的な考え方は、目的に応じてより正確なデータ型を使用すると、より簡単に時間を過ごすことができるということです。

于 2013-03-30T15:36:16.347 に答える