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