0

Pythonを使用して文字列配列をソートしたい。

私は文字列配列を持っています

str_array = {string1, string2, string3}
all string formats are AB-CD-EFGH-IJ-NAME ------> 12-34-5678-09-PHOTO

AB= 00 to 99
CD= 00 to 99
EFGH= 0000 to 9999
IJ= 00 to 99
NAME= any alphabetic name

最初に同等の数値で文字列を並べ替え(文字列の数値部分から「-」を削除)、次にアルファベット順に並べ替えます。

たとえば、12-34-5678-09-PHOTO は 1234568809-PHOTO になります。

4

3 に答える 3

1

私はあなたの質問を完全には理解していませんが、これが役立つかどうかを確認してください:

def myCmp(s1, s2):
    s1 = s1.replace('-', '', 3)
    s2 = s2.replace('-', '', 3)
    int1, _, name1 = s1.partition('-')[0]
    int2, _, name2 = s2.partition('-')[0]
    if int1 < int2:
        return -1
    elif int1 > int2:
        return 1
    elif name1 < name2:
        return -1
    elif name1 > name 2:
        return 1
    else:
        return 0

str_array.sort(cmp=myCmp)
于 2012-11-20T16:53:04.483 に答える
0

iterable の要素をstr_array入力として取り、整数 (1 つ目) と名前 (2 つ目) で構成されるタプル キーを返すキー関数を定義します。

def mykey(text):
    numtxt, name = text.rsplit('-',1)
    numtxt = int(numtxt.replace('-',''))
    return (numtxt, name)

new_str = sorted(str_array, key = mykey)

例えば、

In [30]: sorted(['12-34-5678-09-PHOTO', '12-34-5678-09-MOTOR', '12-04-5678-09-PHOTO', ], key = mykey)
Out[30]: ['12-04-5678-09-PHOTO', '12-34-5678-09-MOTOR', '12-34-5678-09-PHOTO']

このソート手法の詳細については、HOWTO Sort wikiを参照してください。


sorted新しいリストを返すことに注意してください。その場で並べ替えたい場合はstr_array、使用します

str_array.sort(key = mykey)
于 2012-11-20T17:01:04.520 に答える
0

ええと、この並べ替えはどうですか?

いかなる場合でも。

"".join(yourstring.split('-')) 

ダッシュを削除する標準的な方法です。分割の最大数を指定することで、最後の 1 つを保持できます。

"".join(test.split('-', 3))

アルファベット部分でソートしたい場合は、アルファベット部分だけをタプルに保存してそのキーでソートしない限り、直感的には機能しません。

temp = test.split('-')
numbers, alpha = "".join(temp[:-1]), temp[-1]
于 2012-11-20T16:51:59.090 に答える