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

Оповещение о включении Bluetooth отображается только в том случае, если Bluetooth отключен из приложения Настройки . Если вы просто отключите Bluetooth из центра управления, то диалоговое окно не отображается. Отключение Bluetooth из центра управления отключает любые подключенные периферийные устройства, но не полностью отключает оборудование Bluetooth.

Вы можете отобразить собственное предупреждение в ответ на состояние .poweredOff в методе делегата centralManagerDidUpdateState. К сожалению, в этом случае вы не можете отправить пользователя напрямую в настройки Bluetooth.

Вы можете зарегистрировать радар в Apple относительно такого поведения, но я подозреваю, что они ответят, что система работает так, как задумано.

114
задан Ciro Santilli 新疆改造中心法轮功六四事件 1 April 2019 в 16:18
поделиться

4 ответа

Вы фактически не преобразовали свои строки в целые числа. Вернее, вы сделали, но тогда вы ничего не сделали с результатами. Вы хотите:

list1 = ["1","10","3","22","23","4","2","200"]
list1 = [int(x) for x in list1]
list1.sort()

Если по какой-то причине вам нужно сохранить строки вместо целых чисел (обычно это плохая идея, но, возможно, вам нужно сохранить ведущие нули или что-то в этом роде), вы можете использовать функцию key . sort принимает именованный параметр, ключ , который представляет собой функцию, которая вызывается для каждого элемента перед его сравнением. Возвращаемые значения ключевой функции сравниваются вместо прямого сравнения элементов списка:

list1 = ["1","10","3","22","23","4","2","200"]
# call int(x) on each element before comparing it
list1.sort(key=int)
179
ответ дан 24 November 2019 в 02:32
поделиться

настоящая проблема состоит в том что вещи видов вида алфавитно-цифровым образом. Таким образом, если Вы имеете список ['1', '2', '10', '19'] и выполняете вид, Вы добираетесь ['1', '10'. '19', '2']. т.е. 10 прибывает прежде 2, потому что это смотрит на первый символ и виды, начинающие с этого. Это кажется большинством методов в вещах возврата Python в том порядке. Например, если у Вас есть каталог, названный abc с файлами, маркированными, как 1.jpg, 2.jpg и т.д. говорят до 15.jpg, и Вы делаете file_list=os.listdir (abc), file_list не заказан, как Вы ожидаете, а скорее как file_list = ['1.jpg', '11.jpg'---'15.jpg', '2.jpg]. Если порядок, в котором обрабатываются файлы, важен (по-видимому, вот почему, Вы назвали их численно), порядок не то, что Вы думаете, что это будет. Можно избежать этого при помощи "нулевого" дополнения. Например, если у Вас есть список alist = ['01', '03', '05', '10', '02', '04', '06] и Вы выполняете вид на нем, Вы получаете порядок, который Вы хотели. alist = ['01', '02' и т.д.], потому что первый символ 0, который прибывает прежде 1. Сумма нулей, дополняющих Вас потребность, определяется самым большим значением в списке. Например, если самое большое, говорят между 100, и 1000 необходимо заполнить единственные цифры как 001, 002---010,011 - 100, 101 и т.д.

-1
ответ дан 24 November 2019 в 02:32
поделиться

Вы можете передать функцию параметру ключа в метод .sort . При этом система будет отсортировать по ключу (x) вместо x.

list1.sort(key=int)

Кстати, чтобы навсегда преобразовать список в целые числа, используйте карту функцию

list1 = list(map(int, list1))   # you don't need to call list() in Python 2.x

или понимание списка

list1 = [int(x) for x in list1]
37
ответ дан 24 November 2019 в 02:32
поделиться

Сортировка Python не является странной. Просто этот код:

for item in list1:
   item=int(item)

не делает то, что вы думаете - элемент не заменяется обратно в список, он просто выбрасывается.

В любом случае, правильное решение - использовать key = int , как вам показали другие.

12
ответ дан 24 November 2019 в 02:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: