如何以相同的概率将每个列表的第一项附加到新列表

时间:2016-11-06 19:51:48

标签: python python-2.7 python-3.x

import random


def shuffle(L):

    random.shuffle(A)
    random.shuffle(B)

说我的L是[“1”,“2”,“3”,“4”,“5”,“6”]

我将列表分为[1,2,3]和[4,5,6]

如何以随机顺序组合这两个列表,但确保新列表中的第一个数字是A或B中的第一个数字

但确保每次运行该函数时,都会生成一个新列表,该列表仍然以“1”或“4”作为第一个元素

2 个答案:

答案 0 :(得分:0)

您可以使用random.randint()random.shuffle()执行此操作:

import random
l1, l2 = [1, 2, 3], [4, 5, 6]

random_num = random.randint(0, 1)  # will randomly return `0` or `1`

if random_num:
    first_elem, temp_list = l1[0], l1[1:]+l2
else:
    first_elem, temp_list = l2[0], l1+l2[1:]

random.shuffle(temp_list)  # randomly shuffles the list
new_list = [first_elem] + temp_list
# Value of "new_list":
# [4, 3, 2, 5, 6, 1]

答案 1 :(得分:0)

以下是n部分中列表拆分的通用答案:

from random import choice

def shuff(lst, n=2):
    size = len(lst) // n
    subs = (lst[i:i+size] for i in range(0, len(lst), size))
    return [choice(sub) for sub in zip(*subs)]

然后您可以像这样使用此功能:

lst = [1, 2, 3, 4, 5, 6]

print(shuff(lst, 2))
# [4, 2, 3]

print(shuff(lst, 3))
# [5, 6]