我有两个未排序的列表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", "d","e", "c", "a"]
y = [ 1, 2, 3, 4, 5]
有帮助吗?
答案 0 :(得分:1)
尝试使用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')
答案 1 :(得分:1)
~/code/lua/scratch $ lua calc.lua
3
4
/
0.75
~/code/lua/scratch $ lua calc.lua
7
3
//
2
答案 2 :(得分:1)
只需按顺序压缩y
和x
-这样,您就可以按结果的元组的第一项对它们进行排序。
然后您可以排序并再次压缩:
x = ["a", "b", "c", "d", "e"]
y = [ 5, 1, 4, 2, 3]
sorted_y, sorted_x = zip(*sorted(zip(y, x)))
print(sorted_x, sorted_y)
#('b', 'd', 'e', 'c', 'a') (1, 2, 3, 4, 5)
以相反的顺序:
sorted_y, sorted_x = zip(*sorted(zip(y, x), reverse=True))
print(sorted_x, sorted_y)
# ('a', 'c', 'e', 'd', 'b') (5, 4, 3, 2, 1)
答案 3 :(得分:0)
我尝试通过组合两个数组,然后根据数组的第二列对整个数组进行排序。假设数组如下:
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])
现在,访问数组的第一个元素
答案 4 :(得分:0)
此功能有效,我还添加了反转顺序变量:
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", "b", "c", "d", "e"])
y = np.array([ 5, 1, 4, 2, 3])
print(sort_list(x, y))
print(sort_list(x, y, invert=True))
给出结果:
(array(['b', 'd', 'e', 'c', 'a'], dtype='<U1'), array([1, 2, 3, 4, 5]))
(array(['a', 'c', 'e', 'd', 'b'], dtype='<U1'), array([5, 4, 3, 2, 1]))
答案 5 :(得分:0)
x和y是两个默认参数,假定它们位于List中。解决方案是不使用zip。
x = ["a", "b", "c", "d", "e"]
y = [ 5, 1, 4, 2, 3]
X, Y = [], sorted(y)
for i in Y:
X.append(x[y.index(i)])
x,y = X,Y
print(x)
print(y)