需要生成一个2D python列表,每列有两种可能性,每行

时间:2017-06-08 07:33:55

标签: python list

我需要生成一个二维python列表。它由10列组成,每列值为“1”或“0”。鉴于这些条件,我的列表需要是以这种方式形成的所有组合的详尽列表。它自然最终会长达1024行(2 ^ 10)。但是,我不知道从哪里开始这个。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:2)

所以这就是我解决这个问题的方法。首先,我看到我们想要遍历所有1024个0和1的组合。这基本上是从二进制的0到1023计数。所以我从0到1023进行了for循环,在每次迭代时,我将迭代变量i转换为带有format(i, 'b')的二进制变量,然后将其转换为{{1}的列表} 方法。对于像1这样的数字,这会被转换为list,但我们想将其转换为['1']这是哪一行 4确实如此。最后,我们将每个结果附加到“表格”中。变量。

['0', '0', '0', '0', '0', '0', '0', '0', '0', '1']

答案 1 :(得分:1)

您可以使用combinations模块中的itertools,它可以创建元组列表,而不是列表列表:

from itertools import combinations
# Generate all the combinations of 0 and 1
# in a list of tuples where each tuple is formed by 10 elements
# Which leads to 184756 combinations
gen_list = combinations([0,1]*10, 10)
# remove duplicates
unique_elements = list(set(gen_list))
# len(unique_elements)
# >>> 1024

创建列表的概述:

>>> unique_elements
[
(0, 1, 0, 1, 0, 1, 0, 1, 0, 1)
(0, 1, 0, 1, 0, 1, 0, 1, 0, 0)
...
(1, 1, 1, 0, 1, 0, 0, 1, 1, 1)
]

答案 2 :(得分:0)

您应该使用numpy。对于数组创建,您可以这样做:

import numpy as np
rows, cols = 1024, 10
arr = np.zeros((rows, cols))

现在,根据您的条件将某些值设置为1,可以使用:

# this should be changed based on your needs
arr[arr > 0] = 1 # set all values greater than 0 to 1

如果你需要创建一个用随机二进制数据初始化的数组,你可以这样做:

arr = np.random.randint(2, size=(rows,cols))

答案 3 :(得分:0)

如果性能不是问题,您可以始终从0到1023计数,在基数2中创建该数字的字符串表示,然后转换为列表。

def binary_cols(n_cols):
    for i in range(2**n_cols):
        k = [int(j) for j in "{:b}".format(i)]
        k = [0]*(n_cols - len(k)) + k
        yield k

for binary in binary_cols(10):     打印col

给出

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 1, 1]
...
[1, 1, 1, 1, 1, 1, 1, 1, 0, 1]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]    

print(len(list(binary_cols(10))))
1024

编辑:我刚刚注意到我的回答基本上是Saleh Hindi的副本。离开这里,因为在任务中使用的具体工具有很大差异,但他们的答案有更好的解释。