在改组后获取python列表项的先前索引值

yus*_*suf 4 python

假设我有这样一个python列表:

l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)

通过使用random.shuffle,

>>> import random
>>> random.shuffle(l)
>>> l
[5, 3, 2, 0, 8, 7, 9, 6, 4, 1]
Run Code Online (Sandbox Code Playgroud)

我有上面的清单.

如何获取随机列表中每个项目的先前索引值列表?

Kev*_*vin 14

你可以使用每个项目与其索引配对enumerate,然后将其改组.

>>> import random
>>> l = [4, 8, 15, 16, 23, 42]
>>> x = list(enumerate(l))
>>> random.shuffle(x)
>>> indices, l = zip(*x)
>>> l
(4, 8, 15, 23, 42, 16)
>>> indices
(0, 1, 2, 4, 5, 3)
Run Code Online (Sandbox Code Playgroud)

这种方法的一个优点是无论是否l包含重复项,它都可以工作.