0

重要な順に並べられた複数のリストがあります。このリストで並べ替えを行う必要があります。重要なことは、リストの姓が重要だということです。リストに姓と似た名前が 2 つある場合は、姓を最初に表示する必要があります。また、並べ替え後にアルファベットの大文字と小文字が変わらないようにする必要があります。

>>> mylist = ["Ramesh G","K V R Santhosh","Srikanth T G", "R V Laxaman","Ramesh Ghosh"]

>>> mylist.sort()

>>> for x in sorted(mylist):

...     print x

...

K V R Santhosh
R V Laxaman
Ramesh G
Ramesh Ghosh
Srikanth T G

上記の並べ替えでは、「Ramesh G」を最初に印刷しています。私の要件は、以下のように「Ramesh G」の前に「Ramesh Ghosh」を印刷することです。

K V R Santhosh
R V Laxaman
Ramesh Ghosh
Ramesh G
Srikanth T G

ありがとうございました


名前を姓でソートするコードを書きましたが、ソート後にリスト内の類似の名前の前に姓を出力する方法を見つけることができませんでした。

#!/bin/python
# sort a list of names by last name

import operator

data = input ("Enter the list: ")

data_as_lists = [ line.split() for line in data ]

data_as_lists.sort(key=operator.itemgetter(-1))

for each_item in data_as_lists :
   print " ".join(each_item)

このコードは、次のように出力を出力します。

python sort_name.py
Enter the list: ["Ramesh G","K V R Santhosh","Srikanth T G", "R V Laxaman","Ramesh Ghosh"]
Ramesh G
Srikanth T G
Ramesh Ghosh
R V Laxaman
K V R Santhosh

私が望む望ましい出力は次のようになります。

 python sort_name.py
    Enter the list: ["Ramesh G","K V R Santhosh","Srikanth T G", "R V Laxaman","Ramesh Ghosh"]
    Ramesh Ghosh
    Ramesh G
    Srikanth T G
    R V Laxaman
    K V R Santhosh
4

1 に答える 1

2

Python 2.x では、cmpパラメーターをlist.sortメソッドに渡すことができます。ここで、カスタム比較関数を実装できます。

def mycmp(a, b):
    if a.startswith(b):
        return -1
    return cmp(a, b)

mylist = ["Ramesh G","K V R Santhosh","Srikanth T G", "R V Laxaman","Ramesh Ghosh"]
mylist.sort(cmp=mycmp)
print "\n".join(mylist)

出力:

K V R Santhosh
R V Laxaman
Ramesh Ghosh
Ramesh G
Srikanth T G

Python 3.x ではcmp引数が削除されましたがcmp_to_key、func ツールで定義されたものを使用できます

于 2012-04-23T18:27:35.883 に答える