2009-10-10 5 views
0

У меня есть маленький кусочек кода Python в сценарии сервера для моего сайта, который выглядит немного как это:Сумасшедшая поведение питона

console.append([str(x) for x in data]) 
console.append(str(max(data))) 

довольно просто, вы можете подумать, однако результат он выводит это :

['3', '12', '3'] 
3 

по какой-то причине питона думает 3 является макс [3,12,3]!

Я делаю что-то неправильно? Или это неправильное поведение со стороны python?

+1

Что такое сумасшедший, вы ожидаете 'str (x)' сделать число. – u0b34a0f6ae

+0

Имеет ли [str (x) для x в данных] вывод нового списка или изменение текущего? – Martin

+0

Martin: Он создает новый, буквальный '' и '' 'может быть напоминанием, это новый список, аналогичный' [1,2,3] 'is. – u0b34a0f6ae

ответ

8

Поскольку символ '3' выше в таблице ASCII, чем '1'. Вы сравниваете строки, а не цифры. Если вы хотите сравнить численно, вам нужно преобразовать их в числа. Один из способов - max(data, key=int), но вы можете фактически сохранить числа в списке.

+0

Хм, это странно, это сработало - однако он должен был быть списком целых чисел! – Martin

+4

Это не может быть список целых чисел, если вы явно конвертируете их в строки с помощью 'str (x)' :) –

+1

Да, но список данных представляет собой список целых чисел, а затем я отсылаю их к строкам и добавляю их к консоль, которая не влияет на содержимое данных ... не так ли? – Martin

1

Я знаю очень мало Python, но вы берете максимум строк, а это значит, что '3..' больше, чем '1..'.