Python:多组数据用"相同规律"随机洗牌
2019-11-28 本文已影响0人
胜负55开
前提:当有多组长度相同的数据时,需要同时对它们按照相同的规律随机洗牌!注意:必须是按照"相同规律"!因为要保持彼此元素间的"对应关系"不能变!
包:from random import shuffle
辅助函数:zip
操作很简单,一个简单例子就能实现:
from random import shuffle
x = [ 1, 2, 3, 4, 5]
y = ['a', 'b', 'c', 'd', 'e']
shuffle_xy = list( zip(x,y) ) # zip函数:把里面的可迭代对象,"对应位置"元素合并成一个个元组
shuffle( shuffle_xy ) # 以"合并元组"为单位,洗牌
x, y = zip(*shuffle_xy) # 返回的是元组:洗牌后的元组
# 再转为列表:
x = list(x)
y = list(y)
# 结果:
x, y
Out[4]: ([3, 2, 1, 4, 5], ['c', 'b', 'a', 'd', 'e'])
如果数据是"嵌套"的,只随机最大的单位:不会连嵌套内的元素也随机了!
from random import shuffle
# 存在"嵌套"的两组数据:
x = [ (1,10), (2,10), (3,10), (4,10), (5,10)]
y = [('a','cug'), ('b', 'cug'), ('c', 'cug'), ('d', 'cug'), ('e', 'cug')]
shuffle_xy = list( zip(x,y) )
shuffle( shuffle_xy )
x, y = zip(*shuffle_xy)
x = list(x)
y = list(y)
# 结果:以最大单位进行随机
Out[3]:
([(1, 10), (5, 10), (3, 10), (2, 10), (4, 10)],
[('a', 'cug'), ('e', 'cug'), ('c', 'cug'), ('b', 'cug'), ('d', 'cug')])
补充:zip内置函数的使用