Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.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_Binary_Itertools - Fatal编程技术网

Python-使用itertools生成二进制列表

Python-使用itertools生成二进制列表,python,list,binary,itertools,Python,List,Binary,Itertools,我想生成以下输出: [11000]所有与这些数字的组合,但没有双精度 [11000] [01100] [00110] [00011] [10100] . . . 但我不知道该怎么做。在我的问题中,列表中有365个值,大约有20个值。您可以使用: 您可以检查是否只获得唯一字符串: from itertools import filterfalse, permutations # ifilterfalse in 2.x def unique_p

我想生成以下输出:

[11000]所有与这些数字的组合,但没有双精度

   [11000]
   [01100]
   [00110]
   [00011]
   [10100]
   .
   .
   .
但我不知道该怎么做。在我的问题中,列表中有365个值,大约有20个值。

您可以使用:


您可以检查是否只获得唯一字符串:

from itertools import filterfalse, permutations # ifilterfalse in 2.x  

def unique_permutations(s):
    seen = set()
    for p in filterfalse(seen.__contains__, permutations(s)):
        seen.add(p)
        yield "".join(p)
对于
len=5,我得到10个输出值:

['11000', '10100', '10010', '10001', '01100', 
 '01010', '01001', '00110', '00101', '00011']

生成器使其比预先构建列表更高效,并且它只加入所需的内容,但您仍将丢弃许多排列。

您有365个可能的位置来放置20个位置。所以一种方法是把所有的20个长度组合在365个位置上

这在代码中是什么样子的示例:

from itertools import combinations

n = 365
r = 20

for indexes in combinations(range(n), r):
    base = [0]*n
    for i in indexes:
        base[i] = 1
    print(base)

由于这是一个“n选择r”问题,您将有许多可能的组合!要计算数量,请使用:n!/(r!(n-r)!=365!/(20!(365-20)!=4261128273338828179808453831565930。

请发布您的现有代码并描述具体问题。这个问题归结为“n选择r”,在您的案例中是“365选择20”。这意味着有4.3E32可能的组合。这不行,它将打印OP(似乎)不想要的双倍。为了便于修复,您可以将排列放入一个集合中,但问题是
itertools。排列将生成365!=2.5E778项…确切地说,这就是我遇到的问题。您的代码会生成双倍。由于性能原因,将它们过滤掉也不是很好。
from itertools import combinations

n = 365
r = 20

for indexes in combinations(range(n), r):
    base = [0]*n
    for i in indexes:
        base[i] = 1
    print(base)