我正在尝试为我正在进行的项目创建一组测试用例,并且我想创建所有可能的测试用例并迭代它们(快速程序,不应该&# 39; t需要很长时间)。测试用例应该都是长度为1-4的列表,列表中的每个项目应该是0-10之间的整数。列表中的第一项应为0.然后列表集为:
[0]
[0,0]
[0,1]
[0,2]
[0,3]
...
[0,10]
[0,0,0]
[0,0,1]
[0,0,2]
[0,0,3]
...
[0,1,0]
[0,1,1]
[0,1,2]
...
[0,10,10]
...
[0,10,10,10]
这是我到目前为止所做的,但它没有输出正确的列表:
test_list = [0]
for length in range(2, 5):
while len(test_list) < length:
test_list.append(0)
for position in range(1, length):
for digit in range (0, 11):
test_list[position] = digit
print test_list
答案 0 :(得分:4)
或者您可以使用生成器生成列表;这样你就不会在内存中列出整个列表:
from itertools import product
def gen():
yield [0]
for i in range(11):
yield [0, i]
for i, j in product(range(11), range(11)):
yield [0, i, j]
for i, j, k in product(range(11), range(11), range(11)):
yield [0, i, j, k]
for item in gen():
print(item)
对我来说这看起来很可读但是不可扩展(如果你需要更长的列表)这里的其他答案。
因此这里是列表长度可调整的版本:
from itertools import product
def gen(length):
for l in range(length):
for tpl in product(range(11), repeat=l):
yield (0,) + tpl
for item in gen(length=4):
print(item)
此版本现在返回tuples
而不是lists
。如果这很重要,你可以用list()
来判断返回值。
答案 1 :(得分:2)
我会在嵌套循环中使用itertools.product
大小为2,3,4的列表
import itertools
test_list = [0]
for i in range(1,4):
args = [list(range(0,11))] *i
test_list += [[0]+list(x) for x in itertools.product(*args)]
# display list
for t in test_list:
print(t)
答案 2 :(得分:0)
内存高效的单行:
import itertools
size = 4
for x in map(list, itertools.chain(*(itertools.product([0], *[range(11)]*i) for i in range(size)))):
print(x)
您可以使用任何其他列表大小修改4:)