Python: 排序列表

0 投票
11 回答
3003 浏览
提问于 2025-04-15 17:59

我想对数组c进行排序。但是我得到的结果是a,b,d,c,而不是我想要的a,b,c,d。我该怎么做才能对整个数组进行排序,而不仅仅是对一行进行排序呢?

补充说明:我想排序的是数字。而与数字相关的字母,也应该和排序后的数字保持相同的顺序。抱歉,我的问题不太清楚。也许我应该先把数字和字母结合在一起。像这样: [['a',1], ['b',2]....

a = ['a','b','d','c']
b = [1,2,4,3]
c = [[],[]]
c[0]=a
c[1]=b
c[1].sort()
print(c)

11 个回答

3

看起来这就是你真正想要做的事情:

>>> a = ['a', 'z', 'd', 'c']
>>> b = [1,   2,   4,   3]
>>> c = zip(a, b)
>>> c
[('a', 1), ('z', 2), ('d', 4), ('c', 3)]
>>> import operator
>>> c.sort(key=operator.itemgetter(1))
# this would be equivalent: c.sort(key=lambda x: x[1])
>>> c
[('a', 1), ('z', 2), ('c', 3), ('d', 4)]
5

让我们来看看这里发生了什么:

# Initialize the lists
a = ['a','b','d','c']
b = [1,2,4,3]
c = [[],[]]

# Assign the lists to positions in c
c[0]=a
c[1]=b

# Sort b, which was assigned to c[1]
c[1].sort()
print(c)

所以,当然你不能指望 a 会被排序。试试这个:

# Sort a, which was assigned to c[0]
c[0].sort()

# Sort b, which was assigned to c[1]
c[1].sort()
print(c)

或者如果 c 的长度是可变的:

# Sort every list in c
for l in c:
    l.sort()

编辑:针对你的评论,字母和数字之间没有任何联系。如果你想让它们有联系,你需要把它们放在一个像元组这样的结构里。试试:

>>> c = [ (1, 'a'), (2, 'b'), (4, 'd'), (3, 'c') ]
>>> c.sort()
>>> print c 
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]

默认情况下,元组会根据它们的第一个元素进行排序。注意,你可以在这里用任何字母代替 a、b、c、d,元组的排序方式还是一样的(按数字排序)。

2
>>> a = ['a','b','d','c']
>>> b = [1, 2, 4, 3]
>>> c = zip(a, b)
>>> c
[('a', 1), ('b', 2), ('d', 4), ('c', 3)]
>>> c.sort(key=lambda x: x[1])
>>> c
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

撰写回答