Python: 排序列表
我想对数组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)]
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。