我如何使 "rows" 由根据属性排序的对象列表中的对组成

How to i make "rows" consiting of pairs from a list of objects that is sorted based on their attributes

我创建了一个带有属性的 class 并根据它们的 x 级别从 1-6 对它们进行了排序。然后我想将列表排序成对,其中具有最高级别“x”的对象和具有最低级别“x”的对象配对在一起,第二多和第二少等等。如果这是我的方式,它看起来像这样,即使对象不可迭代。

for objects in sortedlist:
    i = 0
    row(i) = [[sortedlist[i], list[-(i)-1]]
    i += 1
    if i => len(sortedlist)
        break

使用zip

我想你想要的代码是:

rows = list(zip(sortedList, reversed(sortedList)))

但是,请注意,这会“复制”元素:

>>> sortedList = [1, 2, 3, 4, 5]
>>> list(zip(sortedList, reversed(sortedList)))
[(1, 5), (2, 4), (3, 3), (4, 2), (5, 1)]

如果你知道列表中的元素个数是偶数并且想避免重复,你可以这样写:

rows = list(zip(sortedList[:len(sortedList)//2], reversed(sortedList[len(sortedList)//2:])))

结果如下:

>>> sortedList = [1,2,3,4,5,6]
>>> list(zip(sortedList[:len(sortedList)//2], reversed(sortedList[len(sortedList)//2:])))
[(1, 6), (2, 5), (3, 4)]

使用循环

虽然我建议使用 zip 而不是 for 循环,但这里是修复您编写的循环的方法:

rows = []
for i in range(len(sortedList)):
  rows.append((sortedList[i], sortedList[-i-1]))

结果:

>>> sortedList=[1,2,3,4,5]
>>> rows = []
>>> for i in range(len(sortedList)):
...   rows.append((sortedList[i], sortedList[-i-1]))
... 
>>> rows
[(1, 5), (2, 4), (3, 3), (4, 2), (5, 1)]