模拟排序中的数组交换

Oge*_*gen 3 python sorting list

l = [0, 1, 3, 2]

l2 = ['foo', 3, 'bar', 10]
Run Code Online (Sandbox Code Playgroud)

如果我说sorted(l),我会得到[0, 1, 2, 3].它将交换最后两个元素.

如何应用相同的行交换l2?即,我想l2成为['foo', 3, 10, 'bar'].

zw3*_*324 6

您可以使用zip,解包元组和列表推导来实现结果:

[y for x, y in sorted(zip(l, l2))]
Run Code Online (Sandbox Code Playgroud)

  • 或者,更简单地说,你可以使用`key`函数作为平局:`[y表示x,y表示排序(zip(l,l2),key = itemgetter(0))]`. (3认同)
  • 注意,如果`l`的两个元素相等,这将比较`l2`的元素来确定顺序.这可能是不可取的,特别是在Python 3上,尝试比较语义无序类型会产生异常.如果这是一个问题,你可以使用`[z for x,y,z in sorted(zip(l,range(len(l)),l2)]`来避免比较`l2`的元素. (2认同)