我正在尝试制作表单列表
[111, 112, 113, 121, 122, 123, 131, 132, 133, 211, 212, 213, ...]
用Python编写,但我遇到了很多困难。我从列表开始
[1, 1, 1]
然后在最后一个术语中添加1,直到它达到3
,然后重置它以转到列表的下一个元素并从那里继续。然后我可以从每个列表中创建一个整数(即[1,1,1]
变为111
)。但是,我觉得这太过分了。有没有更简单的方法在Python中生成这种类型的列表?
答案 0 :(得分:5)
你可以很容易地做到这一点:
[(a+b+c) for a in range(100,400,100) for b in range(10,40,10) for c in range(1,4,1)]
输出:
[111, 112, 113, 121, 122, 123, 131, 132, 133, 211, 212, 213, 221, 222, 223, 231, 232, 233, 311, 312, 313, 321, 322, 323, 331, 332, 333]
答案 1 :(得分:4)
这是一种可以轻松推广到不同数字组和/或更长序列的方法:
In [14]: [int(''.join(l)) for l in itertools.product('123', repeat=3)]
Out[14]:
[111,
112,
113,
121,
122,
123,
131,
132,
133,
211,
...
答案 2 :(得分:0)
尝试以下方法:
tuple_to_int = lambda dd: reduce(lambda rst, d: rst * 10 + d, dd)
print map(tuple_to_int, itertools.product(*([[1, 2, 3]]*3)))
答案 3 :(得分:0)
更一般地说,你可以使用它:
def gen_some_numbers(count=None):
hundreds = 100
tens = 10
ones = 0
while count is None or count > 0:
if count is not None:
count -= 1
ones += 1
if ones > 3:
ones = 1
tens += 10
if tens > 30:
tens = 10
hundreds += 100
yield hundreds + tens + ones
print(list(gen_some_numbers(40)))