Python 字符串数组排序



我想使用 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。

我不

完全理解你的问题,但看看这是否有帮助:

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)

定义一个键函数,该函数将可迭代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 排序 wiki。


请注意,sorted返回一个新列表。如果要就地str_array排序,请使用

str_array.sort(key = mykey)

呃,这是怎么排序的?

无论如何。

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

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

"".join(test.split('-', 3))
如果你想按字母部分排序,

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

temp = test.split('-')
numbers, alpha = "".join(temp[:-1]), temp[-1]

相关内容

  • 没有找到相关文章

最新更新