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

私が必要としているのは、それらのうちの 2 つの組み合わせです。各要素に +4 を n 回追加してから、add 4 シーケンスの最後の要素に +6 を 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

これが非常にクールなコード スニペットであるかどうかはわかりませんが、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]

残念ながら、それはまさにあなたが求めていたものではありません。残念ながら、これらの操作にはアキュムレータが一切関与していないためmap、単独で実行することはできません。zip

于 2013-03-18T09:29:23.073 に答える