2016-12-02 4 views
-1

パターンマッチングの後のリストに上記の要素を印刷したいと思います。下の基本例では、文字列 'foo'をリストにマッチさせます。試合自体( 'foo')ではなく、以下の要素(この場合は 'bar')を印刷したいと思います。Pythonのパターンマッチに続くリスト要素を印刷

theList = ["foo", "bar", "baz", "qurx", "bother"] # example list 

list1 = "foo" # matching string 

regex = re.compile(list1) 

[m.group(0) for l in theList for m in [regex.search(l)] if m] # returns 'foo' 

上記のコードは一致を返しますが、私はtheListに次の要素を返したいと言っています。どんな援助も大いに感謝します。

+0

これは非常に悪いコードです。あなたはもっと簡単なものから始めるべきです。 – hop

答えて

1

リスト内包のような巧妙なものは、動作の仕組みがまだわからないときには使用しないでください。結局のところ、単純なコードで読みやすいコードを使用することは完全にOKです。

この(わかりやすくするために、私は正規表現のナンセンスを左)試してみてください:あなたが最初の(または唯一の)試合にのみ関心がある場合、あなたは

haystack = ["foo", "bar", "baz", "foo", "qurx", "bother"] 
needle = "foo" 

for i, element in enumerate(haystack): 
    if needle in element: 
     print(haystack[i+1]) 
     break 

の場合を使用することができます

haystack = ["foo", "bar", "baz", "foo", "qurx", "bother"] 
needle = "foo" 

result = [] 
for i, element in enumerate(haystack): 
    if needle in element: 
     result.append(haystack[i+1]) 

print(result) 

を正規表現を使用する代わりに等価でマッチさせることもできますが、これは最も簡単な方法です:

idx = haystack.index(needle) 
result = haystack[idx+1] 

例もし針が干し草の最後の位置に見つかったならば、上記のすべてが壊れますが、私はそれを読者に練習として残します。正しく独創的なアプローチを実装

、解決策は次のようになります:

pairs = zip(haystack, haystack[1:]) 
[following for matching, following in pairs if needle in matching] 
関連する問題