2014-06-07 36 views
2

當前的項目要求我以不同的步驟和組創建一個數字列表。 也就是說我需要的步驟是說,3,然後5,7,3,12,9,4,8。這將是第一組。下一組繼續,但在步驟開始時重新開始。生成的步驟用於表達式以生成所需的一系列數字。使用不等步驟的迭代

我創建使用「星圖」,「拉姆達」下面的代碼 - 得益於先進的迭代this偉大的教程。有沒有人知道更好的方式來迭代或其他,在不平等的步驟?

注:所產生的數列的值並不重要,只有步驟。

工作代碼:

from itertools import * 
h = 0 ## Sets first group 
for i in range (4): ## Number of groups to produce 
    values = [(6, h, 2), (6, h, 4), (6, h, 6), (6, h, 8), (6, h, 10), (6, h, 12), (6, h, 14), (6, h, 16)] 
    for j in starmap(lambda x,y, z:(x, y, z, (x * y) + z), values): 
     print '(%d * %d) + %d = %d' % j 
    print("") 
    h += 5 ## Increments by 5 for each group 
+0

代碼中的步驟有所不同嗎? – satoru

+0

我不太明白你的意思。這段代碼顯示了一個非常特殊的情況,它足夠好。但我認爲你正在尋找一種更一般的解決方案,不是嗎? –

+0

是的。我只是好奇別人的想法,如果他們有更好的方法。有人發佈了我認爲更好,或者至少更簡潔的方式,但隨後他將其刪除。我改裝成它和這裏是原始的代碼:步驟= [3,5,7,3,12,9,4,8​​] 爲i的x範圍(4):##位比範圍更有效的,即使沒有按這裏沒關係 爲j步驟: 打印j +(3 * i) print(「」) –

回答

1

由於這是我不清楚的東西像[3,5,7,3,12,9,4,8]所需的卷應參照提供的代碼塊的東西,我會提供一些其他方法來給出的代碼。

而不是創造,並在每個循環覆蓋values,你可以創建整個列表,並與發電機在必要的參考模式重複。

e = 2 
f = 8 
g = 4 
h = 5 
values = [(6, x, y) for x in xrange(0, g * h, h) for y in xrange(e, f * e + 1, e)] 
gen = (values[((x + 1) * f) - f:(x + 1) * f] for x in xrange(g)) 
for i in gen: 
    for j in starmap(lambda x, y, z:(x, y, z, (x * y) + z), i): 
     print('(%d * %d) + %d = %d' % j) 

    print('') 

或者,如果你知道從哪裏開始h(0),多少由遞增(5),一共有多少組(4),你可以遍歷一個範圍,使用列表理解來分配values

h = 5 
for i in xrange(0, 4 * h, h): 
    values = [(6, i, x) for x in xrange(2, 17, 2)] 
    for j in starmap(lambda x, y, z:(x, y, z, (x * y) + z), values): 
     print('(%d * %d) + %d = %d' % j) 

    print('') 
+0

謝謝你的回答。 –