我目前有以下字符串列表:
['0\t *** *', '1\t * *', '2\t * *', '3\t ***',
'-1\t *', '-2\t *', '-3\t **']
所以,我试图对列表进行排序,使其成为:
['3\t ***', '2\t * *', '1\t * *', '0\t *** *',
'-1\t *', '-2\t *', '-3\t **']
但是,当我使用时:
new_list = sorted(new_list, reverse=True)
我得到以下内容:
['3\t ***', '2\t * *', '1\t * *', '0\t *** *',
'-3\t **', '-2\t *', '-1\t *']
我如何修复它,以便在列表中的字符串排序时考虑-3而不仅仅是 - 考虑-3。
字符串列表按字母顺序排序。
您需要提供一个键函数,以便在'\t'
char上拆分,并将第一个字段解析为整数:
>>> l=['0\t *** *', '1\t * *', '2\t * *', '3\t ***', '-1\t *', '-2\t *', '-3\t **']
>>> l.sort(key=lambda x: int(x.split('\t')[0]), reverse=True)
>>> l
['3\t ***', '2\t * *', '1\t * *', '0\t *** *', '-1\t *', '-2\t *', '-3\t **']
请注意,您可以使用new_list = sorted(new_list, reverse=True)
进行就地排序,而不是使用new_list.sort(reverse=True)
。
或者,如果您不介意使用第三方软件包,您可以查看natsort软件包,它似乎可以解决这类问题。
如果您的前两个字符将始终是数字(例如-1
)或数字和\
或\t
(例如2\
),您可以设置自定义键和条带:
>>> sorted(i, reverse = True, key = lambda k: int(k[0:2].strip()))
['3\t ***', '2\t * *', '1\t * *', '0\t *** *',
'-1\t *', '-2\t *', '-3\t **']