我想使用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。
发布于 2012-11-21 01:01:05
定义一个键函数,它接受可迭代名称的一个元素作为输入,并返回一个由整数(first)和str_array (Second)组成的元组键:
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-21 00:53:04
我不完全理解你的问题,但看看这是否有帮助:
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-21 00:51:59
呃,这个排序是怎么样的?
无论如何。
"".join(yourstring.split('-')) 是删除破折号的规范方法。您可以通过指定最大拆分数来保留最后一个。
"".join(test.split('-', 3))如果您想要按字母部分排序,除非您使用存储元组中的字母部分并按该键排序,否则它不会直观地工作:
temp = test.split('-')
numbers, alpha = "".join(temp[:-1]), temp[-1]https://stackoverflow.com/questions/13477942
复制相似问题