1

好吧,我真的被那个单线卡住了。

然而试图用 zip 和 map 完成我的任务,但我想要的都没有。所以我的问题是:我可以用这样的自定义步骤生成一个列表吗?

>>wicked cool code snippet
>>[101, 105, 109, 115, 121]

这背后的想法是我有一个序列 X 的开始等于 101。然后我加 4,然后再加 4。然后我将 6 加到前一个结果中,然后我再次加 6。

I believe it should look like this mathematically speaking:

An = A1+4d,A2+4d,A3+6d,A4+6d。

UPD

好吧,让我说得更清楚。

range(101, 120, 3) <-经典算术级数

[101, 104, 107, 110, 113, 116, 119] < - The output

我需要的是其中两个的组合。就像将 +4 加到每个元素 n 次,然后将 +6 加到 add 4 序列的最后一个元素 n 次。

希望,现在更清楚了。

4

3 回答 3

2

有点硬编码:

In [42]: step=[0,3,6,11,16]

In [43]: [i+step[n] for n, i in enumerate(range(101, 106))]
Out[43]: [101, 105, 109, 115, 121]
于 2013-03-18T09:24:53.783 回答
1

不确定这是否是一个很酷的代码片段,但它会用一行代码返回您的答案:

 >>> map(lambda x: x+100 if x == 1 else (x+103 if x == 2 else (x+106 if x == 3 else (x+111 if x == 4 else x+116))), range(1,6))
 [101, 105, 109, 115, 121]
于 2013-03-18T09:29:17.640 回答
1

这对我有用:

>>> reduce(lambda acc, i: acc + [acc[-1] + i], [4,4,6,6], [101])
[101, 105, 109, 115, 121]

不幸的是,这并不是您所要求的,而且恐怕它不能单独完成mapzip因为这些操作不涉及任何类型的累加器。

于 2013-03-18T09:29:23.073 回答