2013-03-18 63 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