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

呃,这是怎么排序的?

任何状况之下。

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

是删除破折号的规范方法。您可以通过指定最大拆分数来保留最后一个。

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

如果您想按字母部分排序,除非您使用将字母部分存储在元组中并按该键排序,否则它不会直观地工作:

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

定义一个 key 函数,它将 iterable 的元素str_array作为输入,并返回一个由整数(第一个)和名称(第二个)组成的元组键:

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 回答