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内置函数的使用

上一篇下一篇

猜你喜欢

热点阅读