#python #pulp
#python #целлюлоза
Вопрос:
У меня есть объект списка, который выглядит в отладчиках следующим образом:
Как вы можете видеть, элементы списка упорядочены в алфавитном порядке. То есть по индексу 02
он имеет элемент 10
, а 2
не . Также обратите внимание, что каждый элемент на самом деле является объектом типа pulp.pulp.LpVariable
, а число, которое мы видим в списке, на самом деле является значением name
свойства каждого объекта (как видно из последнего списка изображения). Pulp, похоже, сортирует свои переменные в алфавитном порядке.
Я хочу, чтобы этот список был отсортирован численно по имени каждого объекта. То есть я хочу 2
по индексу 2
, 3
по индексу 3
и так далее.
Я попробовал ниже:
>>> from pulp import *
>>> prob = LpProblem("lp", LpMinimize)
>>> dvs = {}
>>> for i in range(20):
... dvs[i]=LpVariable(str(i))
...
>>> prob = lpSum(dvs.values())
>>> prob.variables()
[0, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 3, 4, 5, 6, 7, 8, 9]
>>> prob.variables().sort(key=lambda x:int(x.name))
>>> prob.variables()
[0, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 3, 4, 5, 6, 7, 8, 9]
Как вы можете видеть, сортировка просто не происходит. Я ожидал, что вывод в последней строке будет:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
Как я могу это сделать?
Ответ №1:
Я не знаю, что prob.variables()
это значит, но тот факт, что is является вызываемым, заставляет меня сильно подозревать, что вы не ссылаетесь на один и тот же список при его сортировке и при его печати, но получаете новый список при каждом вызове prob.variables()
Пожалуйста, попробуйте следующее:
result = sorted(prob.variables(), key=lambda x:int(x.name))
print(result)