2016-07-17 8 views

答えて

0
[a[i]+a[i+1]+a[i+2] for i in range(0,len(a)-1,2)] 
4

>>> list(range(0,len(a) - 1,2)) 
[0, 2, 4] 

(リストの内包がiをループとして):

>>> [a[i:i+3] for i in range(0,len(a) - 1,2)] 
['abc', 'cdc', 'cdc'] 

これはiは、以下の値を取得することを意味します。つまり、range(0,len(a) - 1,2)0で始まり、2の増分で、最大値に達するまで増加しますが、len(a) - 1を超えないことを意味します。 Python 3のドキュメントには、読むのに役立つかもしれないrange()に関する説明があります。

これは、所望のセグメントにaa[i:j]それはiからajにスライスを取る手段と表記)をスライスします意味します。最初にスライスa[0:0 + 3]をとり、次にスライスa[2:2 + 3]と最後に、探している文字列であるスライスa[4:4 + 3]を取得します。

私たちは、特に指定のない限り、我々は我々が望む結果で終わるませんaの長さから1を引いている:ここlist comprehensionを使用して

>>> [a[i:i+3] for i in range(0,len(a),2)] 
['abc', 'cdc', 'cdc', 'c'] 
+2

生成しようとするものを奇妙なパターン。 –

+0

応答のおかげで私は初心者ですが、このlen(a)がどのように動作しているか教えてください - 1,2 –

+0

@AutomaSha:答えを少し広げました。 –

0

は、実際にカウンタのPythonの禅にあるかもしれません(「シンプルは複合体より優れている」)。

他のリスト内包表記の回答は正しいものの、なぜ動作するのかを理解するまでには時間がかかります。

一方、次のようなコードでは、まず一目で把握することは難しいことではありません。

a='abcdcdc' 

for i in range(0, len(a), 2): 
    b = a[i:i+3] 
    if len(b) == 3: 
     print(b) 
関連する問題