我如何使 "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)]
我创建了一个带有属性的 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)]