Python - 基于另一个列表的度假村列表

时间:2016-03-06 06:41:05

标签: python python-2.7

我有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]

我试图比较元素,但我面对负号的问题

感谢

3 个答案:

答案 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]