2015-05-11 4 views
0

Вот мой код:сортировать список поплавка питон

for line in lines: 
    name,price,yield = line.split(',') 
    for part in [price,yield]: 
     part = float(part) 
     company = Company(name,price,yield) 

tempList = sorted(companyList, key=lambda company: company.price) 
for company in tempList: 
    print(company.price) 

Распечатанный список занимает 49,0 в меньшем количестве, чем 5,0 Кто-нибудь знает, что происходит не так?

+0

Что класса компания выглядит? – ZdaR

+4

Не используйте '' yield'' в качестве переменной. Это ключевое слово в Python! –

+2

Не должен ли этот код генерировать SyntaxError? –

ответ

1

Это:

for part in [price,yield]: 
    part = float(part) 
    company = Company(name,price,yield) 

не делать то, что вы думаете, что он делает. Числовые значения price и yield не привязаны к их соответствующим исходным именам, но буквально относятся к имени part (поэтому он фактически перезаписывается на второй итерации).

Линия, в которой вы создаете Company, вероятно, также неверна, она должна быть вне цикла for.

Самый простой способ исправить это, чтобы заменить три строки, я цитируемые в одну строку:

company = Company(name, float(price), float(yield)) 
+0

Как было предложено @ mkrieger1: численные значения потерялись при прохождении деталей. Преобразование в float теперь выполняется внутри инициализации объекта. Только объекты без пустых строк создаются путем прогона деталей. – Elyakim

4

Сортировка лексикографически, так как вы сортируете str вместо float. Если вы конвертируете company.price в float, он будет сортироваться правильно. Хотя, если это действительно числовое значение, вы, вероятно, должны убедиться, что price преобразуется в float в Company__init__ или что-то в этом роде.

tempList = sorted(companyList, key=lambda company: float(company.price)) 
+0

Thnx: теперь преобразование выполняется в классе __init__. – Elyakim

Смежные вопросы