Я в настоящее время пытается упорядочить список вида:Python буквенно-цифровой сортировки для списка списков
[["Chr1", "949699", "949700"],["Chr11", "3219", "444949"],
["Chr10", "699", "800"],["Chr2", "232342", "235345234"],
["ChrX", "4567", "45634"],["Chr1", "950000", "960000"]]
Использование встроенного sorted()
, я получаю:
[[ «Chr1», '949699', '949700'], ['Chr1', '950000', '960000'], ['Chr10', '699', '800'], ['Chr11', '3219', '444949'] , ['Chr2', '232342', '235345234'], ['ChrX', '4567', '45634']]
, но я хочу, чтобы «Chr2» появился перед «Chr10». Мое текущее решение включает в себя код, адаптированные страницах: Does Python have a built in function for string natural sort?
Моего текущим решение выглядит следующим образом:
import re
def naturalSort(l):
convert= lambda text: int(text) if text.isdigit() else text.lower()
alphanum_key= lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
if isinstance(l[0], list):
return sorted(l, key= lambda k: [alphanum_key(x) for x in k])
else:
return sorted(l, key= alphanum_key)
Уступая правильный порядок:
[['Chr1', '949699', '949700'], ['Chr1', '950000', '960000'], ['Chr2', '232342', '235345234'], ['Chr10', '699', '800'], ['Chr11', '3219', '444949'], ['ChrX', '4567', '45634']]
Есть ли лучший способ сделать это ?
Это называется 'естественной сортировки'. –
А .. но я думаю, что это может быть не обман, так как он пытается создать его сам. Но этот вопрос может быть лучше подходит для http://codereview.stackexchange.com – aIKid
Я привел страницу естественной сортировки. Я специально задаю вопрос о сортировке списка списков. – Megatron