【发布时间】:2012-05-25 13:45:25
【问题描述】:
假设我有两个数组:
a = [1, 2, 3, 4]
b = [5, 6, 7, 8, 9]
我想将这两个数组交错到一个变量“c”(注意“a”和“b”不一定具有相同的长度),但我不希望它们以一种确定的方式交错。简而言之,仅仅压缩这两个数组是不够的。我不想要:
c = [1, 5, 2, 6, 3, 7, 4, 8, 9]
相反,我想要一些随机的东西,例如:
c = [5, 6, 1, 7, 2, 3, 8, 4, 9]
还要注意'a' 和'b' 的顺序保留在结果数组'c' 中。
我目前的解决方案需要一个 for 循环和一些随机数生成。我不喜欢它,我希望有人能指出更好的解决方案。
# resulting array
c = []
# this tells us the ratio of elements to place in c. if there are more elements
# in 'a' this ratio will be larger and as we iterate over elements, we will place
# more elements from 'a' into 'c'.
ratio = float(len(a)) / float(len(a) + len(b))
while a and b:
which_list = random.random()
if which_list < ratio:
c.append(a.pop(0))
else:
c.append(b.pop(0))
# tack on any extra elements to the end
if a:
c += a
elif b:
c += b
【问题讨论】:
-
但是您只想随机化交错或整个数组?我的意思是,您需要保留原始数组顺序吗?
-
你不喜欢它什么?您将需要生成随机数,而您可以用列表推导替换许多循环有什么意义?
-
是的,这对我来说似乎很好。我相信你可以写一些更紧凑但“简单胜于复杂”的东西。
-
随机交错列表是什么意思?例如,
[1, 2, 3, 4, 5, 6, 7, 8, 9]是随机交织的有效结果。您想随机化插入之间的时间段吗? -
除了有趣的 Python,你真的需要考虑下一步应该做什么。如果您已经选择了 1、2、3,下一个选择应该是 50% 4/50% 5(甚至按列表)还是 16% 4、84% 5(加权 1 个未选择项目列表 a 与 5 个未选择项目列表b).