python-3.x - 如何将列表恢复为原始形式
问题描述
我将如何撤消我在 alist 上所做的洗牌并将其恢复到原来的顺序:
[1, 2, 3 , 4]
import random
alist = [1, 2, 3, 4]
random.shuffle(alist) # alist is randomly shuffled
解决方案
我刚刚从A good way to shuffle 中得到了这个答案,然后取消了一个 python 列表问题的接受答案,并对它做了一些小的改动。它工作完美,请参考@trincot 和@canton7 答案以获取更多信息,他们受过良好教育。
import random
def getperm(l):
seed = sum(l)
random.seed(seed)
perm = list(range(len(l)))
random.shuffle(perm)
random.seed() # optional, in order to not impact other code based on random
return perm
def shuffle(l): # [1, 2, 3, 4]
perm = getperm(l) # [3, 2, 1, 0]
l[:] = [l[j] for j in perm] # [4, 3, 2, 1]
def unshuffle(l): # [4, 3, 2, 1]
perm = getperm(l) # [3, 2, 1, 0]
res = [None] * len(l) # [None, None, None, None]
for i, j in enumerate(perm):
res[j] = l[i]
l[:] = res # [1, 2, 3, 4]
alist = [1, 2, 3, 4]
print(alist) # [1, 2, 3, 4]
shuffle(alist)
print(alist) # shuffled, [4, 3, 2, 1]
unshuffle(alist)
print(alist) # the original, [1, 2, 3, 4]
推荐阅读
- express - 在 Apostrophe CMS 中实现 Express Static
- postgresql - Postgres 复制用引号括起来的字符串
- php - 如何在 Laravel 5 中创建转储自动加载的方法/命令
- json - JSON查询的Postgreql avg
- c# - 我的 .NET Core 2.1 项目中未指定 Razor SDK 任务的组装位置——
- mysql - 复式会计数据库设计/架构
- azure - 没有客户端 ID 和客户端密码的 Azure 应用资源管理授权
- avplayer - 如何开始在后台播放 AVPlayer 的音轨?
- android - Duolingo 的 RTL ViewPager 覆盖 TabLayout 字体
- c - 我在数组中的指针无法正常工作