Вот проблема, я использую функцию sorted
, чтобы упорядочить список буквенно-цифровых строк. Указанные строки должны содержать числа в них, разделенные буквой.Python сортируется со списком буквенно-цифровых строк?
Например: sortqns(['s1q1', 's10q1', 's1q2', 's10q10', 's10q2'])
def cmpqn(a, b):
if len(a) > len(b):
return 1
if len(a) < len(b):
return -1
if len(a) == len(b):
return 0
def sortqns(qnlist):
new = sorted(qnlist, cmp=cmpqn)
return new
Возвращения ['s1q1', 's1q2', 's10q1', 's10q2', 's10q10']
Моя проблема сортировки вторую цифру:
sortqns(['s12q1', 's1q2', 's1q1'])
Returns ['s1q2', 's1q1', 's12q1']
Вместо:
Returning ['s1q1', 's1q2', 's12q1']
В первом примере мое желаемое возвращение было бы отключено, если бы и первые два элемента были заменены.
Использование функции 'key', а не' cmp' также более эффективно (поскольку функция называется только «O (n)» раз, а не «O (n * log (n)), 'раз). – Blckknght