list1 = [1,2,3,4,5]
list2 = [2,3,4,1,2]
list3 = [2,4,6,2,1]
def random_chunk(li, min_chunk=1, max_chunk= 3):
it = iter(li)
while True:
nxt = list(islice(it,randint(min_chunk,max_chunk)))
if nxt:
yield nxt
else:
break
def shuffle(a, b, c):
assert len(a) == len(b) == len(c)
start_state = random.getstate()
random.shuffle(a)
random.setstate(start_state)
random.shuffle(b)
random.setstate(start_state)
random.shuffle(c)
random.setstate(start_state)
shuffle(list1, list2, list3)
slice = list(random_chunk(list1))
在随机混合列表之后,我最终使用了块函数进行了随机编码。但是要将两个列表平均分开并不容易。如何以相同方式剪切多个列表?例如,当list1 = [1,2,3,4,5]切成[1,2],[3,4,5]时,list2也是[2,3],[4,2,1]如果您让我知道,我将非常感谢。
答案 0 :(得分:1)
zip 功能允许您组合,修饰列表。然后,只需选择您的块并将其分开(无法装饰):
import random
list1 = [1,2,3,4,5]
list2 = [2,3,4,1,2]
list3 = [2,4,6,2,1]
lists = [list1, list2, list3]
pack = list(zip(*lists))
print(pack)
random.seed(0)
random.shuffle(pack)
print(pack[2:4])
chunk1, chunk2, chunk3 = zip(*pack[2:4])
print(chunk1, chunk2, chunk3)
答案 1 :(得分:0)
似乎您想在数组中而不是在列表中进行操作。
import numpy as np
list1 = [1,2,3,4,5]
list2 = [2,3,4,1,2]
list3 = [2,4,6,2,1]
arr = np.array([list1, list2, list3])
def random_index(arr, size=None, replace=True):
return np.random.choice(range(arr.shape[1]), size=size, replace=replace)
for idx in range(10):
print(arr[:, random_index(arr, size=2, replace=False)])
例如,这-您可以使用可以给项目提供有效整数索引的任何内容替换random_index,这取决于下一步要执行的操作。