我想对数组c进行排序。但我没有得到答案a,b,c,d。相反,我得到a,b,d,c。我能做什么,对整个数组进行排序而不仅仅是一行?
编辑:我想对数字进行排序。连接的字母应该与排序的数字具有相同的顺序。抱歉,我的问题不明确。也许我应该首先加入数字和字母。像这样: [[ '一个',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)
答案 0 :(得分:4)
让我们来看看这里发生了什么:
# 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,元组仍然会按相同的顺序排序(按编号)。
答案 1 :(得分: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)]
答案 2 :(得分: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)]
答案 3 :(得分:1)
[sorted(x) for x in c]
答案 4 :(得分:1)
我想到的第一件事就是使用numpy数组,而不是内置的list
数据类型。
类似的东西:
>>> from numpy import *
>>> a = array(['a', 'b', 'd', 'c'])
>>> a.sort()
>>> print a
['a' 'b' 'c' 'd']
>>> reshape(a, (2,2))
array([['a', 'b'],
['c', 'd']],
dtype='|S1')
答案 5 :(得分:1)
def sort_parallel(a, b):
ba = zip(b, a)
ba.sort()
return [e[1] for e in ba]
a = ['a','b','d','c']
b = [1,2,4,3]
print sort_parallel(a, b)
打印
['a', 'b', 'c', 'd']
答案 6 :(得分:1)
你可以试试(对于Python 3.x):
def sort_a_based_on_b(a, b):
c = sorted(list(zip(b, a)))
return list(list(zip(*c))[1]) # Returns the sorted a
这将根据b。
中的值返回已排序的aa = ['a','b','d','c']
b = [1,2,4,3]
print(sort_a_based_on_b(a,b))
打印['a', 'b', 'c', 'd']
答案 7 :(得分:0)
在Python中,array
(您正在使用的那种)被称为list
。至于您的问题,请将c[1].sort()
更改为c[0].sort()
,并对您的字符串列表进行排序,而不是c [1]中包含的整数列表。
答案 8 :(得分:0)
Roger Pate给出了一个很好的答案,但你说“但现在他对这些字母进行了排序。我想对这些数字进行排序。”
这是Roger Pate答案的修改版本,用数字对c进行排序。这是你想要的吗?
>>> def mykey(tup):
>>> return tup[1]
>>>
>>> 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=mykey)
>>> c
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
sort()
方法函数的“键”是一个函数。该函数返回您要使用的密钥。 mykey()
函数接受一个元组并返回其第二个值(索引为1的值)。因此,.sort()
将使用元组的数字部分进行排序。字符串仍将匹配数字。您甚至可以再次拆分列表c
以恢复列表a
和b
,它们仍会匹配。
答案 9 :(得分:0)
你必须提供自定义比较函数才能使用。使用lambda非常简单:
cmp = lambda x,y: (x[1], x[0]) < (y[1], y[0])
L.sort(cmp = cmp)
Lambda是所有匿名函数,在这种情况下它会反转元素的顺序,这样第二个元素就成为主键,并且使用“&lt;”进行比较。操作
答案 10 :(得分:0)
这就是你要追求的吗?
>>> a = ['a','b','d','c']
>>> b = [1, 2, 4, 3]
>>> c = zip(b, a)
>>> c.sort()
>>> c = [(y, x) for (x, y) in c]
>>> print(c)
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]