我有2个名单:
a=[45, 41, 42, 43, 44]
b=[41, 42, 43, -44, -45]
我想根据b
排序a
而没有负号,
所以度假后它应该像:
a=[45, 41, 42, 43, 44]
b=[-45, 41, 42, 43, -44]
我试图比较元素,但我面对负号的问题
感谢
答案 0 :(得分:9)
>>> sorted(b, key=lambda x: a.index(abs(x)))
[-45, 41, 42, 43, -44]
或者,如果您想在其位置排序b
b.sort(key=lambda x: a.index(abs(x)))
答案 1 :(得分:2)
上面的答案优雅而简洁。
但是,如果您在较大的列表上操作,可以考虑使用位置字典来阻止对索引的调用。
复杂性将保持在O(n log n)vs O(n ^ 2 log n)
a=[45, 41, 42, 43, 44]
b=[41, 42, 43, -44, -45]
# populate dictionary to reduce number of array scans
keys = {}
for x in xrange(len(a)):
keys[a[x]] = x
# key is position in a, or -1
def key(x):
x = abs(x)
if x in keys:
return keys[x]
return -1
b.sort(key = key)
print b
答案 2 :(得分:1)
您可以使用abs
作为绝对值。
>>> sorted(map(abs,b),reverse=True)
[45, 44, 43, 42, 41]