Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python itertools是否允许从多个列表中创建列表,其中我对每个列表的选择次数设置了限制?_Python_List_Python 2.7_Generator_Itertools - Fatal编程技术网

Python itertools是否允许从多个列表中创建列表,其中我对每个列表的选择次数设置了限制?

Python itertools是否允许从多个列表中创建列表,其中我对每个列表的选择次数设置了限制?,python,list,python-2.7,generator,itertools,Python,List,Python 2.7,Generator,Itertools,我有一个使用itertools.product的列表,但我不想将每个列表的选择限制为1项。有没有办法让它限制一个列表中的3个,下一个列表中的2个,依此类推 列表的大小不一,在列表中也是如此 例如: [1,2,3,4,5],[4,6,45,2,5],[6,5,8,4,47,34],[5,7,23,8,3,10]] 我希望能够从列表中选择以下金额: 3,4,1,2 每次迭代,每组只能选择一次每个数字 感谢您在这方面提供的帮助。您可以创建一个新的更长的列表,方法是根据需要重复现有列表,并将该更长的列表

我有一个使用itertools.product的列表,但我不想将每个列表的选择限制为1项。有没有办法让它限制一个列表中的3个,下一个列表中的2个,依此类推

列表的大小不一,在列表中也是如此

例如:

[1,2,3,4,5],[4,6,45,2,5],[6,5,8,4,47,34],[5,7,23,8,3,10]]

我希望能够从列表中选择以下金额:

3,4,1,2

每次迭代,每组只能选择一次每个数字


感谢您在这方面提供的帮助。

您可以创建一个新的更长的列表,方法是根据需要重复现有列表,并将该更长的列表传递给
itertools。product

from itertools import product

def multi_product(lists, repeats):
    repeated_iterables = [
        lst
        for lst, repeat in zip(lists, repeats)
        for i in range(repeat)
    ]
    return product(*repeated_iterables)
from itertools import product

def flatten(lst):
    return [ x for it in list for x in it ]

def multi_product(lists, repeats):
    producted = [ product(lst, repeat) for lst, repeat in zip(lists, repeats) ]
    return ( flatten(x) for x in product(*producted) )
或者,您可以使用两层
产品

from itertools import product

def multi_product(lists, repeats):
    repeated_iterables = [
        lst
        for lst, repeat in zip(lists, repeats)
        for i in range(repeat)
    ]
    return product(*repeated_iterables)
from itertools import product

def flatten(lst):
    return [ x for it in list for x in it ]

def multi_product(lists, repeats):
    producted = [ product(lst, repeat) for lst, repeat in zip(lists, repeats) ]
    return ( flatten(x) for x in product(*producted) )
使用
flatte
可以保证返回一个简单的平面列表,但是如果希望按原始列表对值进行“分组”,可以将其删除。这种情况下的解决方案更简单:

def multi_product(lists, repeats):
    producted = [ product(lst, repeat) for lst, repeat in zip(lists, repeats) ]
    return product(*producted)

通过根据需要重复现有列表,并将更长的列表传递给
itertools.product
,可以创建新的更长列表:

from itertools import product

def multi_product(lists, repeats):
    repeated_iterables = [
        lst
        for lst, repeat in zip(lists, repeats)
        for i in range(repeat)
    ]
    return product(*repeated_iterables)
from itertools import product

def flatten(lst):
    return [ x for it in list for x in it ]

def multi_product(lists, repeats):
    producted = [ product(lst, repeat) for lst, repeat in zip(lists, repeats) ]
    return ( flatten(x) for x in product(*producted) )
或者,您可以使用两层
产品

from itertools import product

def multi_product(lists, repeats):
    repeated_iterables = [
        lst
        for lst, repeat in zip(lists, repeats)
        for i in range(repeat)
    ]
    return product(*repeated_iterables)
from itertools import product

def flatten(lst):
    return [ x for it in list for x in it ]

def multi_product(lists, repeats):
    producted = [ product(lst, repeat) for lst, repeat in zip(lists, repeats) ]
    return ( flatten(x) for x in product(*producted) )
使用
flatte
可以保证返回一个简单的平面列表,但是如果希望按原始列表对值进行“分组”,可以将其删除。这种情况下的解决方案更简单:

def multi_product(lists, repeats):
    producted = [ product(lst, repeat) for lst, repeat in zip(lists, repeats) ]
    return product(*producted)

从第一个列表中选择哪3个数字,等等?从第一个列表中选择3会包括
1、1、1
还是只包含不同的元素?它会是从第一个列表中选择的3个不同的数字。我将调整问题。从第一个列表中选择哪3个数字,等等?从第一个列表中选择3是包括
1、1、1
还是只包含不同的元素?它将是从第一个列表中选择的3个不同的数字。我会调整这个问题的。关于这个。今晚我会检查这个答案。我认为你需要使用
组合
而不是
产品
作为内部级别,因为不需要从同一列表中重复。Ty用于此。今晚我将检查这个答案。我认为您需要使用
组合
而不是
产品
作为内部级别,因为不需要从同一列表中重复。