我有一个像这样的字符串列表:
X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
Y = [ 0, 1, 1, 0, 1, 2, 2, 0, 1 ]
使用 Y 中的值对 X 进行排序以获得以下输出的最短方法是什么?
["a", "d", "h", "b", "c", "e", "i", "f", "g"]
具有相同“键”的元素的顺序并不重要。我可以求助于使用 for
构造,但我很好奇是否有更短的方法。有什么建议吗?
最短代码
[x for _, x in sorted(zip(Y, X))]
示例:
X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
Y = [ 0, 1, 1, 0, 1, 2, 2, 0, 1]
Z = [x for _,x in sorted(zip(Y,X))]
print(Z) # ["a", "d", "h", "b", "c", "e", "i", "f", "g"]
<小时/>
一般来说
[x for _, x in sorted(zip(Y, X), key=lambda pair: pair[0])]
解释:
-
zip
两个列表
。
- 使用
sorted()
基于zip
创建一个新的、排序的列表
.
- 使用列表推导式从已排序、压缩的
列表
中提取每对的第一个元素。
有关如何设置\使用 key
参数以及一般 sorted
函数的更多信息,请查看 this .
<小时/>
我是一名优秀的程序员,十分优秀!