首页 > 解决方案 > 如何平均划分多个列表?[Python]

问题描述

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] .如果你让我知道,我真的很感激。

标签: pythonpython-2.7

解决方案


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)

推荐阅读