将两个列表排序到

2024-06-16 18:47:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我得列两张单子。一个有名字(str),第二个有工资(int)。然后,我得把工资和名字分类。问题是,当我这样做的时候,只有工资是排序的。在

names = ["Asia","Łukasz","Aneta","Ola","Mikołaj"]
wages = [15000,1500,200,14500,2600]

print("Here(should) be sorted list")
wages.sort()
for i in range (len(wages)) :
    print(wages[i],names[i])

为了清楚起见,我想把这两张单子放在一起,并对它们进行排序。用最简单的方法。没有功能,集合,拉链等,只有循环。在


Tags: names排序分类名字单子intprintstr
3条回答

对,没有拉链和电视机。我们会很难做到的。在

首先,复制工资:

>>> wages_c = wages[:]

对副本排序:

^{pr2}$

现在,在副本上迭代并找到相应的原始名称:

>>> for wage in wages_c:
...     key = wages.index(wage)
...     print(wages[key], names[key])

这是愚蠢的,如果你有重复的名字或重复的工资,但它不使用压缩或设置。在

原始溶液:

我们从您的列表开始:

>>> names = ["Asia","Łukasz","Aneta","Ola","Mikołaj"]
>>> wages = [15000,1500,200,14500,2600]

合并它们:

>>> names_and_wages = list(zip(names, wages))

按第二个元素排序:

>>> names_and_wages.sort(key=lambda x: x[1])

并打印:

>>> for name, wage in names_and_wages:
...     print(name, wage)

好吧,很好。如果您不想以任何方式合并列表,那么您需要手动编写一个排序算法,返回一系列移动,您可以应用于这两个列表,使它们按相同的顺序排列。如果您的列表中只有唯一的元素,则可以通过对一个列表进行排序,然后查看每个元素的移动位置,并将相同的更改应用于另一个列表,从而简化此过程。在

更理智的回答

有两个相互依赖的列表,即元素在列表中的位置。在

你需要根据你想要的分类来决定,是按名字还是按工资?在

您可以使用循环轻松地zip这两个列表

i = 0
merged = []
while i < len(wages):
  merged.append((wages[i], names[i]))

然后使用sortkey = lambda x: x[0]按工资排序,key = lambda x: x[1]按姓名排序。在

如果您只想用循环来实现这一点,您可以自己实现一些排序算法,并在names和{}中交换相应的元素。在

下面是一个使用气泡排序的示例:

for j in range(len(wages)-1,0,-1):
    for i in range(j):
        if wages[i]>wages[i+1]:
            tempWage = wages[i]
            wages[i] = wages[i+1]
            wages[i+1] = tempWage

            tempName = names[i]
            names[i] = names[i+1]
            names[i+1] = tempName

相关问题 更多 >