gpt4 book ai didi

Python - 在列表列表中按字母表对列表项进行排序,并让其他列表遵循交换顺序

转载 作者:太空宇宙 更新时间:2023-11-03 12:26:34 24 4
gpt4 key购买 nike

我正在尝试按第一行对 Python 中的列表列表进行排序(特别是不使用 Numpy,我知道有很多使用 Numpy 的解决方案,但这是一个专门要求不使用 Numpy 的方法的问题)

这是我的列表:

listOfLists = [ ['m', 'e', 'l', 't', 's'],
['g', 'p', 's', 'k', 't'],
['y', 'q', 'd', 'h', 's'] ]

我希望将此列表 1) 按字母顺序排序,但 2) 仅按第一个列表项排序,垂直切片应仅遵循第一个列表项的顺序。例如:

newListofLists = [ ['e', 'l', 'm', 's', 't'],
['p', 's', 'g', 't', 'k'],
['q', 'd', 'y', 's', 'h'] ]

listOfLists 中的第一项是“melts”,然后按字母顺序排序成为“elmst”。列表列表中的其余项目未按字母顺序排序,而是“遵循”列表中第一项的切换和排序模式。

我可能有点可笑,但我已经在这个问题上花费了数小时(这是一个更大程序的一部分)。我已经尝试从列表列表中切出第一个项目并自行按字母顺序对其进行排序,然后将其与列表列表中尚未排序的第一个列表的一部分进行比较,并比较位置。但我似乎什么都做不了。

最佳答案

您可以使用 zip 转置列表,对转置进行排序,然后将该列表转置回正确的维度之一。

listOfLists = [ ['m', 'e', 'l', 't', 's'],
['g', 'p', 's', 'k', 't'],
['y', 'q', 'd', 'h', 's'] ]

print(list(zip(*sorted(zip(*listOfLists)))))
# [('e', 'l', 'm', 's', 't'), ('p', 's', 'g', 't', 'k'), ('q', 'd', 'y', 's', 'h')]

编辑:

正如@StevenRumbalski 在评论中指出的那样,上面的代码将完全对垂直切片进行排序(按第一个字母,然后是第二个字母,等等),而不是按第一个字母稳定地排序(按第一个字母排序,然后按相对顺序排序)在输入中)。为了可见性,我将在此处重现他的解决方案:

from operator import itemgetter
list(map(list, zip(*sorted(zip(*listOfLists), key=itemgetter(0)))))

关于Python - 在列表列表中按字母表对列表项进行排序,并让其他列表遵循交换顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48831661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com