制作一个代码,可以自动填写有限制的列表

时间:2017-07-06 17:28:50

标签: python

例如,内容必须只有1和0,长度为7个变量,并且每次必须不同。我是python的新手,在编码方面,我知道有一种方法可以做到,但我的知识是有限的,我真的没有尝试过我自己,但它因为我根本没有任何线索

def variable_creator:
    auto_variable_list = [None]*7
    content = ['0','1']
    for auto_variable_list in content:
        "auto_variable_list return 7 length with content variables"

我期望的输出是

list1=[0000000]
list2=[1000000]
list3=[0100000]
...
list128=[1111111]

不一定按特定顺序但不违反此声明,因为每个列表都需要为所有127列表提供不同的内容

2 个答案:

答案 0 :(得分:1)

如果您希望[0, 1]的所有组合长度为7,那么您可以采用[0, 1]重复7次的笛卡尔积,例如:

In []:
import itertools as it
list(it.product([0, 1], repeat=7))

Out[]:
[(0, 0, 0, 0, 0, 0, 0),
 (0, 0, 0, 0, 0, 0, 1),
 (0, 0, 0, 0, 0, 1, 0),
 (0, 0, 0, 0, 0, 1, 1),
 (0, 0, 0, 0, 1, 0, 0),
 ...

您不需要为每个项目创建自变量,因为您可以在列表中为它们编制索引:

In []:
vars = list(it.product([0, 1], repeat=7))
vars[0]

Out[]:
(0, 0, 0, 0, 0, 0, 0)

如果确实需要命名,那么dict将是合适的结构:

In []:
vars = {'List{}'.format(i): v for i, v in enumerate(it.product([0, 1], repeat=7), 1)}
vars['List128']

Out[]:
(1, 1, 1, 1, 1, 1, 1)

因为你只是想要一个数字的二进制形式,所以替代方法只是将数字转换为二进制字符串,例如:

In []:
[tuple(map(int, format(i, '07b'))) for i in range(128)]

Out[]:
[(0, 0, 0, 0, 0, 0, 0),
 (0, 0, 0, 0, 0, 0, 1),
 (0, 0, 0, 0, 0, 1, 0),
 (0, 0, 0, 0, 0, 1, 1),
 (0, 0, 0, 0, 1, 0, 0),
 ...

答案 1 :(得分:0)

使用random.choice和列表理解:

import random
choices = [0,1]
[random.choice(choices) for _ in xrange(7)]
[0, 1, 1, 0, 1, 1, 0]
[random.choice(choices) for _ in xrange(7)]
[0, 1, 1, 0, 0, 0, 0]
[random.choice(choices) for _ in xrange(7)]
[1, 0, 0, 0, 1, 1, 1]