2013-03-18 67 views
1

好吧,我真的被这个单行程卡住了。使用Python中的自定义步骤生成列表序列

然而试图用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

好吧,让我更清楚。

范围(101,120,3)< - 古典算术级数

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

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

希望,现在更清楚了。

+1

很难用现在的形式回答你的问题,因为没有明显的顺序应该继续下去(如果A5和A6使用+8而不是+6?) - 如果它继续。 – orlp 2013-03-18 09:14:26

+0

也许在'101'和'[4,4,6,6]'上做一些功能操作?我想用加法说,除了这种方式,所以你必须在一个范围或其他东西。稍微超出我的大脑ATM。 – Patashu 2013-03-18 09:14:35

+0

其不清楚。 4或6表示什么?前一个字的长度? – 2013-03-18 09:15:30

回答

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] 
+0

不错的一个.. +1 .. .. – Kent 2013-03-19 15:55:09

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] 
1

这个工作对我来说:

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

不幸的是,这不是你要求的,我恐怕不能用单独使用和zip,因为这些操作不涉及任何类型的累加器。

+0

这是我所追求的最有可能的,非常感谢 – alexeygaidamaka 2013-03-18 09:34:47