不等步的迭代

时间:2014-06-07 01:49:58

标签: python iteration

当前项目要求我以不相等的步骤和组创建数字列表。 即我需要步骤3,然后是5,7,3,12,9,4,8​​。这将是第一组。下一组继续,但在步骤开始时重新开始。结果步骤用于表达式,以生成所需的数字序列。

我使用" starmap创建了以下代码," " lambda" - 感谢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

1 个答案:

答案 0 :(得分: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('')