【问题标题】:How can I divide multiple lists equally? [python]如何平均划分多个列表? [Python]
【发布时间】:2018-11-18 17:53:30
【问题描述】:
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] .如果你让我知道,我真的很感激。

【问题讨论】:

  • 你生成一个随机数当你制作块时。这意味着每次调用该函数时,都会得到随机块。相反,您在开始对列表进行分块之前 获得随机数,然后像这样传递它怎么样?或者在开始对每个列表进行切片之前记录下随机数生成器所在的种子,并确保每个列表都从同一个种子开始?

标签: python python-2.7


【解决方案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)

【讨论】:

  • 感谢您的回答。我想你对我的问题的理解有点不同。我想要的是当list1变成shuffle时,list的剩余部分移动到同一个地方,想要分成同样大小。比如list1一分为二,剩下的list一分为二。由于英语不是我的母语,我的问题可能很奇怪。
  • 这里有两个问题:首先,您想打乱一组列表,使其所有元素“保持对齐”。装饰、洗牌和不装饰赋予了这一点。然后,您想以某种方式划分 de 列表,并声称只需将相同的方法应用于所有列表,因为它们的元素与它们最初的对齐方式相同。此答案显示了如何将列表拆分为大小均匀的块:stackoverflow.com/questions/312443/…
【解决方案2】:

您似乎想在数组中做事,而不是在列表列表中。

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 替换为任何为您提供有效整数索引的项目,具体取决于您接下来要执行的操作。

【讨论】:

    猜你喜欢
    • 2014-05-19
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2013-07-22
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    相关资源
    最近更新 更多