Судя по комментариям, самая большая проблема, с которой вы столкнулись - это несогласованный источник данных. В данном списке значений у вас есть обычные значения с плавающей запятой: nan
, 1.0
, 0.0
строки, которые представляют числа с плавающей запятой: "1.0"
, "0.0"
и строки, которые содержат целые числа в виде двоичных значений: "\x01"
Относительно сортировать поплавки по строкам примерно так:
if type(item) == float:
#do stuff
Кроме того, если вы хотите отсортировать значения nan
(особый тип с плавающей точкой), вы можете сделать это:
if type(item) == float
if item == float('nan'):
#do other stuff
else:
#do stuff
Сортировка строк немного сложнее, поскольку существует множество способов представления значения с использованием строки. Обычное преобразование строки в плавающее с использованием float("1.0")
работает, если ваша строка уже выглядит как число с плавающей точкой (правила для поиска как поплавок) . Однако, если значение представлено двоичным значением строковых символов (может показаться, что это так), вам нужно будет найти способ различать два типа строки. Это может быть так же просто, как сначала попытаться вызвать float(item)
и отловить ошибки, когда формат не соответствует критерию «как с плавающей точкой». Тогда, предполагая, что у вас есть только один символ, вы можете использовать ord(item)
, чтобы вернуть двоичное представление указанного символа. Это может выглядеть примерно так:
try:
converted = float(item)
catch ValueError:
if len(item) == 1:
converted = ord(item)
else:
#determine how to handle multi character values