如何按字母顺序排序列表,并使其他列表按相同顺序排序
我有三个列表,里面的元素数量是一样的:电子邮件地址、薪水和ID。
我想把电子邮件地址按字母顺序排序,然后以某种方式对另外两个列表(薪水和ID)进行排序。
E.g.,
Emails:
z@company.com
a@company.com
Salaries:
50000
60000
IDs:
2
1
问题是:我想把电子邮件排序,让a@c.com排在最前面,z@c.com排在最后面;薪水要从60000到50000排序,ID要从1到2排序。
补充说明:
1. 这三个列表的长度是一样的,而且可以超过两个元素。
2. 我之后会把ID传给一些函数,以获取更多的列表。这些列表不需要排序,因为它们会按照ID列表的顺序来排列。
3 个回答
0
假设每个邮箱ID都是独一无二的,那么这个方法就可以用:
sortedEmails = emails[:]
sortedEmails.sort()
sortedSalaries = []
for email in sortedEmails:
i = emails.index(email)
sortedSalaries.append(salaries[i])
希望这对你有帮助
3
这其实是ebo的解决方案,只不过把它简化成了一行代码,使用了sorted()而不是list.sort,并且在赋值时用了多个变量,这样可以直接得到每个单独的列表(这些列表的名字和原来的相同,只是在前面加了一个s_
前缀)。
>>> email = ['z@company.com', 'a@company.com']
>>> salaries = [50000, 60000]
>>> ids = [2,1]
>>> s_email, s_salaries, s_ids = zip(*sorted(zip(email, salaries, ids)))
>>> s_email
('a@company.com', 'z@company.com')
>>> s_salaries
(60000, 50000)
>>> s_ids
(1, 2)
>>>
5
试试这个:
emails = ["z@c.com", "a@c.com"]
salaries = [50, 60]
ids = [2, 1]
intermediate = zip(emails, salaries, ids)
intermediate.sort()
result = zip(*intermediate)