猿问

如何从根据其属性排序的对象列表中创建由对组成的“行”

我创建了一个带有属性的类,并根据它们的 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


紫衣仙女
浏览 91回答 1
1回答

慕工程0101907

使用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-loop,但以下是修复您编写的循环的方法: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)]
随时随地看视频慕课网APP

相关分类

Python
我要回答