如何解决根据python中第二个列表的升序对列表进行排序
我有两个未排序的列表x和y,如下所示:
x = ["a","b","c","d","e"]
y = [ 5,1,4,2,3]
我想对列表y进行两次排序,一次是升序,然后是降序。但是,在y的每次排序中,我还需要相应地对列表x的相应元素进行排序。 两个列表的项目长度相同。
我尝试使用以下代码,但无法正常工作:
def sort_list(list1,list2):
zipped_pairs = zip(list2,list1)
z = [x for _,x in sorted(zipped_pairs)]
return z
print(sort_list(x,y))
预期输出:以升序排列
x = [ "b","e","a"]
y = [ 1,3,5]
有帮助吗?
解决方法
尝试使用key
中的sorted
参数,并保留许多相同的代码:
def sort_list(list1,list2):
zip_pairs=zip(list2,list1)
z = sorted(zip_pairs,key=lambda x: x[0])
return z
x,y = zip(*sort_list(x,y))
print(x,y)
输出:
(1,2,3,4,5) ('b','d','e','c','a')
,
~/code/lua/scratch $ lua calc.lua
3
4
/
0.75
~/code/lua/scratch $ lua calc.lua
7
3
//
2
,
只需按顺序压缩y
和x
-这样,您就可以按结果的元组的第一项对它们进行排序。
然后您可以排序并再次压缩:
x = ["a","b","c","d","e"]
y = [ 5,1,3]
sorted_y,sorted_x = zip(*sorted(zip(y,x)))
print(sorted_x,sorted_y)
#('b','a') (1,5)
以相反的顺序:
sorted_y,x),reverse=True))
print(sorted_x,sorted_y)
# ('a','b') (5,1)
,
我尝试通过组合两个数组,然后根据数组的第二列对整个数组进行排序。假设数组如下:
db.collection(this.state.email).doc("UserProfile").set(data).then(() =>{
this.copyMathDatabase().then(() => {
this.copyEnglishDatabase();
});
});
现在,使用第二列对arr = [['a',5],['b',1],['c',4],['d',2],['e',3]]
变量进行如下排序:
arr
输出
arr.sort(key = lambada x:x[1])
现在,访问数组的第一个元素
,此功能有效,我还添加了反转顺序变量:
import numpy as np
def sort_list(list1,list2,invert = False):
sorted_idex = np.argsort(list2)
if invert:
return list1[sorted_idex[::-1]],list2[sorted_idex[::-1]]
else:
return list1[sorted_idex],list2[sorted_idex]
x = np.array(["a","e"])
y = np.array([ 5,3])
print(sort_list(x,y))
print(sort_list(x,y,invert=True))
给出结果:
(array(['b','a'],dtype='<U1'),array([1,5]))
(array(['a','b'],array([5,1]))
,
x和y是两个默认参数,假定它们位于List中。解决方案是不使用zip。
x = ["a","e"]
y = [ 5,3]
X,Y = [],sorted(y)
for i in Y:
X.append(x[y.index(i)])
x,y = X,Y
print(x)
print(y)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。