Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何按每个对象的属性值对对象列表进行排序?_Python_Pulp - Fatal编程技术网

Python 如何按每个对象的属性值对对象列表进行排序?

Python 如何按每个对象的属性值对对象列表进行排序?,python,pulp,Python,Pulp,我有一个列表对象,它在调试器中的外观如下: 如您所见,列表的元素按字母顺序排列。也就是说,在索引02,它有元素10,而不是2。还要注意的是,每个元素实际上是一个类型为pill.pill.LpVariable的对象,我们在列表中看到的数字实际上是每个对象的name属性的值(如最后一张图像列表所示)。纸浆似乎按字母顺序排列其变量 我希望这个列表按每个对象的名称进行数字排序。也就是说,我想在索引2处使用2,在索引3处使用3等等 我尝试了以下方法: >>> from pulp imp

我有一个列表对象,它在调试器中的外观如下:

如您所见,列表的元素按字母顺序排列。也就是说,在索引
02
,它有元素
10
,而不是
2
。还要注意的是,每个元素实际上是一个类型为
pill.pill.LpVariable
的对象,我们在列表中看到的数字实际上是每个对象的
name
属性的值(如最后一张图像列表所示)。纸浆似乎按字母顺序排列其变量

我希望这个列表按每个对象的名称进行数字排序。也就是说,我想在索引
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]

我怎样才能做到这一点呢?

我不知道prob.variables()的作用是什么,但is是一个可调用的事实让我强烈怀疑,在排序和打印它时,您并不是在引用同一个列表,而是每次调用
prob.variables()

请尝试以下操作:

result = sorted(prob.variables(), key=lambda x:int(x.name))
print(result)