如何平等地划分多个列表? [python]

时间:2018-11-18 17:53:31

标签: python python-2.7

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]如果您让我知道,我将非常感谢。

2 个答案:

答案 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,这取决于下一步要执行的操作。