我有两个不同的列表(大小相同),例如a和b。它们都包含对象,并且每个对象都具有相同的属性“ Cost”(当然具有不同的值)。我想建立一个新列表c,其中包含从a中随机选择的对象,例如通过使用random.choice()然后检查c中的这些对象中哪个与它的属性“ Cost”有关,具有最高的值。 但是我也想建立一个新的列表d,其中包含对b对象的选择,不应随机选择b,而应使用与列表c中值最高的对象相同的索引。那就是我的问题。
我试图用枚举建立一个新的列表,例如a1,所以这个列表包含具有两个元素的元组:第一个是“索引”,第二个是对象。然后我通过从a1中随机选择元组来生成新列表c。我还可以使用max()找出c中的哪些对象具有最高的属性。但是输出只是对象,而不是包括“索引”在内的完整元组。因此,由于我不知道该对象具有哪个索引,因此无法选择列表b的相应对象。
这里是一个例子:
a = [[1,2],[3,4],[5,6]]
注意:所有三个对象([1,2],[3,4]和[5,6])都有一个属性“成本”,在这种情况下为“ 10”,“ 100”和“ 1000”分别。
a1 = list(enumerate(x))
c = [random.choice(a1) for i in range(2)]
现在,我想弄清楚c中的两个对象中哪个具有关于“成本”属性的最高值。所以我试试这个:
max([x[1] for x in c], key=attrgetter("Cost"))
这可行,但是我只得到具有最高值的对象,在这种情况下,它是[5,6],而不是相应的“索引”(因此,元组的第一项),在这种情况下,它将为2(或3,具体取决于enumerate()的起始位置)。
我发现了这样的东西:
max(c, key=itemgetter(1))[0]
但是在那里,它仅检查元组(对象)的第二项,而不检查与此对象相对应的属性的值。
有没有解决这个问题的机会?