按范围列出改组

时间:2018-08-16 22:07:02

标签: python list shuffle

我有一个完整的字符串列表。我想获取前10个值,将它们洗牌,然后替换列表的前10个值,然后替换为值11-20,然后是21-30,依此类推。

例如:

input_list = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t']

和一个名为:

的函数
shuffle10(input_list)
>>> ['d','b','c','f','j','i','h','a','e','g','m','n','s','r','k','p','l','q','o','t']

我认为,如果我定义一个空列表并随机分配每10个值,这将是可行的:

newlist=[]
for i in range(int(len(input_list) / 10)):
    newlist.append(shuffle(input_list[(i*10):(i+1)*10]))
    print(newlist)

但是所有返回的是:

[None]
[None, None]

2 个答案:

答案 0 :(得分:2)

使用random.sample代替shuffle

>>> input_list = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t']
>>> sum((random.sample(input_list[n:n+10], 10) for n in range(0,len(input_list),10)), [])
['f', 'i', 'd', 'a', 'g', 'j', 'e', 'c', 'b', 'h', 'p', 'l', 'r', 'q', 'm', 't', 's', 'n', 'o', 'k']

答案 1 :(得分:1)

您要在适当位置创建一个临时列表,并对其进行混排,但不能捕获其结果。您可以拉出相关的子列表,随机播放,然后创建一个新列表:

new_list=[]
for i in range(1, len(input_list), 10):
    list_slice = input_list[i:i + 10]
    shuffle(list_slice)
    new_list.extend(list_slice)
print(new_list)
相关问题