0

からのアイテムの位置のリストがありますlist=[1,4,5,8]

これらの位置を使用して、これらの位置の後に元のリストで別のアイテムが出現することを見つけたいと思います。

特定の位置の後に列挙を使用して、特定の位置が変化し続けるためにforループに入れるライナーが1つあるかどうか疑問に思いました。

次に例を示します。

list1=['a','b','a','c','d','b','b','a','e','b','f'] 
list2#positions of 'a'=[0,2,5]

私はb後のすべての最初の出現が欲しいaが、前ではないa

4

2 に答える 2

0

最初にマークを見つける必要がある場合は、それらの後のターゲットの最初のインスタンスを見つける前に:

def find_after(lst, target, mark):
    marks = []
    while True:
        try:
            marks.append(lst.index(mark,marks[-1] if marks else 0))
        except ValueError:
            # no more 'a's were found
            break
    targets = []
    for m in marks:
        try:
            targets.append(lst.index(target, m))
        except ValueError:
            continue
    return targets

次のように機能します。

find_after(['a','b','a','c','d','b','b','a','e','b','f'], 'b', 'a')
#[1,5,9] # the locations of the 'b's (target) after the 'a's (mark)
于 2013-03-08T22:37:50.860 に答える
0

それらを見つける簡単な方法を次に示します。このバージョンでは、値が見つからない場合に例外が発生します。

>>> s = 'abacdaebfxxxxxxxxxxxxxxxxxxxxxabc'
>>> finder = lambda lst, inds, x: [lst.index(x, i) for i in inds]
>>> finder(s, [0, 2, 3, 10], 'a')
[0, 2, 5, 30]

これはs、 が文字列またはリストの場合に機能します。

于 2013-03-08T22:41:17.147 に答える