在Python中生成难度列表

时间:2014-12-19 13:41:52

标签: python list

我正在尝试制作表单列表

[111, 112, 113, 121, 122, 123, 131, 132, 133, 211, 212, 213, ...]
用Python编写,但我遇到了很多困难。我从列表开始

[1, 1, 1]

然后在最后一个术语中添加1,直到它达到3,然后重置它以转到列表的下一个元素并从那里继续。然后我可以从每个列表中创建一个整数(即[1,1,1]变为111)。但是,我觉得这太过分了。有没有更简单的方法在Python中生成这种类型的列表?

4 个答案:

答案 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)))