2017-12-18 32 views
1

私は文字列のリストを持っており、文字列のリストで検索している部分文字列の最初の文字の位置を見つけようとしています。私はこれを行うためにfind()メソッドを使用していますが、最初の文字の位置を表示しようとすると、Pythonは正しい位置を返しますが、部分文字列を見つけることができないように-1の後にスローしますそれを見つけることができた後。私は正しい値の後に-1を返すことなく、部分文字列の最初の文字の位置を返す方法を知りたい。ここで文字列のリスト内のサブ文字列内の最初の文字の位置を見つける(Python 3)

は私のコードです:

mylist = ["blasdactiverehu", "sdfsfgiuyremdn"] 

word = "active" 

if any(word in x for x in mylist) == True: 
    for x in mylist: 
     position = x.find(word) 
     print(position) 

出力は次のようになります。私はそれがに関連することができると思います

5 

5 
-1 

私は出力だけであることが予想しました実際には、ループはリスト内のすべての文字列の部分文字列を検索しています。位置が見つかると、さらに多くを検索しますがもちろん、部分文字列 "active"が1つしか出現しないのでエラーが返されますが、部分文字列を1つ見つけたら検索を停止する方法がわかりません。どんな助けもありがとう、ありがとう。

+0

を行うことができますのように私の答えをマークすることができます場合は私に知らせてくださいもう1つの援助が必要な場合は、同じ問題を抱えている他の人々がそれに頼ることができます。 –

答えて

1

実際にあなたのコードは、あなたが望むように動作しません。なぜなら、いずれかの単語に部分文字列が含まれていれば、それぞれの文字列のチェックが行われるからです。 これを回避する良い方法は、ジェネレータを使用することです。具体的には、次の()

default_val = '-1' 
position = next((x.find(word) for x in mylist if word in x), default_val) 
print(position) 

それは単にあなたのリスト「マイリスト」に、条件if word in xのために修飾する最初の文字列の「x」の部分文字列「単語」の位置を与えます。ところで

、いずれかを使用している場合はTrue ==をチェックする必要はありません()、それはすでにTrue/Falseの返すので、あなたは、単にif any(): ...

関連する問題