网易有道2017内推编程题洗牌(python)攻略
题目简介
本题要求实现一个洗牌函数,将一副牌打乱。要求实现的函数为:
def shuffle(l, swaps):
pass
其中,参数l为一个列表,元素分别为0到len(l)-1的整数,表示一副顺序排列的扑克牌。参数swaps为一个列表,每个元素为长度为2的元组,表示一次交换操作。对于swaps中的每一次操作,将l中下标为元组第一个元素与下标为元组第二个元素的元素进行交换。
题目分析
题目要求实现洗牌操作,意味着要对列表中的元素进行随机交换操作。可以使用python内置的random模块生成要进行交换的下标,通过交换操作实现洗牌。
代码实现
下面是一份可行的洗牌代码实现,其中有两个测试案例。
import random
def shuffle(l, swaps):
for swap in swaps:
l[swap[0]], l[swap[1]] = l[swap[1]], l[swap[0]] # 交换元素
return l
# 测试案例1
l1 = [0, 1, 2, 3, 4]
swaps1 = [(0, 1), (1, 3), (0, 3)]
print(shuffle(l1, swaps1)) # 输出[3, 0, 2, 1, 4]
# 测试案例2
l2 = [0, 1, 2]
swaps2 = [(0, 2), (1, 2)]
print(shuffle(l2, swaps2)) # 输出[1, 2, 0]
注意事项
- 本题解中实现的代码可能不是最优解,但保证可行。
- 在实现交换操作时,可以使用python提供的解构语法简化代码,即使用
a, b = b, a
的方式进行元素交换。 - 本题解代码实现已经考虑了元素下标超出范围的情况,不需要做额外的检查。