当前项目要求我以不相等的步骤和组创建数字列表。 即我需要步骤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
答案 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('')