Pyrym
@Pyrym
Python 3 и PyQt5

Python 3 | Как правильно сортировать список из чисел и строк?

Как правильно сортировать список чисел и строк по возрастанию?
A = [3, 'de', 18, 42, 9]
Мне нужно получить:
[3,9,18,42,'de']
_______________________
Добавлено позже:
И как быть с такой штукой:
B = ['34k', 'pe', 3, 'de', 18.6, 42, 'v200', 'v8', 9]
Нужно получить:
B = [3, 9, 18.6, '34k', 42, 'de', 'pe', 'v8', 'v200']
  • Вопрос задан
  • 552 просмотра
Решения вопроса 2
dimonchik2013
@dimonchik2013
non progredi est regredi
digits = [x for x in A if isinstance(x, int)]
strings = [x for x in A if isinstance(x, str)]
digits.sort()
strings.sort()
digits.extend(strings)
print(digits)
Ответ написан
aRegius
@aRegius
Python Enthusiast
Пробуйте:
>>> import re
>>> data = ['15', 5, '34k', 'de', '120', 40, 18.6, 've', 'v8', 'v200', 'a10c', 'a5b']

# Выбираем числа и строки, с чисел начинающиеся
>>> numbers_mix = [i for i in data if str(i)[0].isdigit()]
>>> numbers_mix
['15', 5, '34k', '120', 40, 18.6]

# Сортируем
>>> digit = '(\d+)'
>>> numbers_mix_sort = sorted(numbers_mix, key=lambda x: int(re.split(digit, str(x))[1]))
>>> numbers_mix_sort
[5, '15', 18.6, '34k', 40, '120']

# Выбираем оставшиеся строки
>>> text_mix = [i for i in data if i not in numbers_mix]
>>> text_mix
['de', 've', 'v8', 'v200', 'a10c', 'a5b']

#Сортируем
>>> text_mix_sort = sorted(text_mix, key=lambda x: (re.split(digit, x)[0], int(re.split(digit, x+'0')[1])))
>>> text_mix_sort
['a5b', 'a10c', 'de', 'v8', 'v200', 've']

# Итого
>>> result = numbers_mix_sort + text_mix_sort
>>> result
[5, '15', 18.6, '34k', 40, '120', 'a5b', 'a10c', 'de', 'v8', 'v200', 've']
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы