2017-10-02 13 views
0

以下のコードは、発電機を使用して'.'のインデックスのリストを文字列に作成します。発電機からのリストの項目の予期しない順序

def gen(s): 
    dot_index = 0 
    while dot_index >= 0: 
     dot_index = s.find('.', dot_index + 1) 
     yield dot_index 

def get_dots(): 
    s = '23.00 98.00 99.00' 
    l = [s.find('.', i + 1) for i in gen(s)] 
    print(l) 

get_dots() 
Iはリストの順序があることを期待

[2、8、14、-1]、実際の順序は、[8、14、-1、2]です。

なぜ最初のインデックス2がリストの最後であるのかを説明してください。

これはおそらく、私の側の発電機の理解が不十分なためです。

おかげ

答えて

1

ジェネレータは、あなたが期待する順序を返し、問題がget_dots()にあなたが最初のドットのインデックスを取得することで、その後、あなたは次のドット[s.find('.', i + 1) for i in gen(s)]を検索:

ダム
def gen(s): 
    dot_index = 0 
    while dot_index >= 0: 
     dot_index = s.find('.', dot_index + 1) 
     yield dot_index 

def get_dots(): 
    s = '23.00 98.00 99.00' 
    l = list(gen(s)) 
    print(l) 

get_dots() 
+0

私の部分で間違い。ありがとう。 – John

関連する問題