为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

紫衣仙女 2024-01-04 15:19:51
我创建了一个带有属性的类,并根据它们的 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
查看完整描述

1 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

使用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)]


查看完整回答
反对 回复 2024-01-04
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信