alw*_*btc 40 python sorting list
有一个清单:
a = [("ax", 1), ("ec", 3), ("bk", 5)]
Run Code Online (Sandbox Code Playgroud)
另一个清单:
b = ["ec", "ax", "bk"]
Run Code Online (Sandbox Code Playgroud)
我想按照以下方式排序a:
sort_it(a, b)
a = [("ec", 3), ("ax", 1), ("bk", 5)]
Run Code Online (Sandbox Code Playgroud)
这该怎么做?
Amb*_*ber 60
a.sort(key=lambda x: b.index(x[0]))
Run Code Online (Sandbox Code Playgroud)
这a使用b每个元组的第一个元素的索引in a作为其排序的值进行就地排序.
另一种可能更清晰的写作方式是:
a.sort(key=lambda (x,y): b.index(x))
Run Code Online (Sandbox Code Playgroud)
如果你有大量的项目,那么做一些事情可能会更有效率,因为.index()在长列表中可能是一项昂贵的操作,而且你实际上并不需要进行完整的排序,因为你已经知道了这个顺序:
mapping = dict(a)
a[:] = [(x,mapping[x]) for x in b]
Run Code Online (Sandbox Code Playgroud)
请注意,这仅适用于2元组列表.如果你想让它适用于任意长度的元组,你需要稍微修改它:
mapping = dict((x[0], x[1:]) for x in a)
a[:] = [(x,) + mapping[x] for x in b]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23399 次 |
| 最近记录: |