2016-03-21 5 views
0

文字列のリスト内の文字列に特定の部分文字列が含まれているかどうかを確認します。彼らは私が新しいリストにそのリスト項目を保存したいならば:項目に特定の部分文字列が含まれている場合、リスト項目を新しいリストに保存します

list = ["Maurice is smart","Maurice is dumb","pie","carrots"] 

私は、次のコードを使用して試してみました:

new_list = [s for s in list if 'Maurice' in list] 

をするが、その項目の一つが'Maurice'であれば、これは単にリストを複製します。

if "Maurice" in list: 
    # Code that saves all list items containing the substring "Maurice" to a new list 

結果はその後、次のようになります:

new_list = ["Maurice is smart", "Maurice is dumb"] 

これを行う方法を探している場合は、多分、次の構文を使用してこれを解決する方法があった場合 は、だから私は思っていました私は何も見つけることができません。

答えて

3

あなたはこれを行うことができます:

list = ["Maurice is smart","Maurice is dumb","pie","carrots"] 

new_list = [x for x in list if "Maurice" in x] 

print(new_list) 

出力:

['Maurice is smart', 'Maurice is dumb'] 
+0

この回答を読んで、誰のために:私はの名前に建てられたのpythonを使用しないことを強くお勧めしますあなた自身の変数。変数名としてlistを使用すると、コードのユーザーはキーワードリストを使用できなくなります。これはあらゆる種類の悪影響をもたらす可能性があります。 – DevShark

2

あなたは、リストの内包表記を使用することができます。

また、組み込みのlistを変数名として使用しないでください。

my_list = ["Maurice is smart", "Maurice is dumb", "pie", "carrots"] 
[e for e in my_list if 'Maurice' in e] 
+0

変数名として '' list''を使わないことに言及してくれてありがとう –

2

あなたは、Pythonの組み込みfilterを使用することができます。

data = ["Maurice is smart", "Maurice is dumb", "pie", "carrots"] 
res = filter(lambda s: 'Maurice' in s, data) 
print(res) 

出力:

['Maurice is smart', 'Maurice is dumb'] 

最初の引数がtrueに評価されなければならない述語関数(ここでは簡単なラムダ)でありますiterableの要素は一致と見なされます。

filterは、述語に基づいて反復可能性をフィルタリングする必要があるときは常に役に立ちます。また

、少し余分な、このデータをフィルタリングするために、今は想像:

data = ["Maurice is smart","Maurice is dumb","pie","carrots", "maurice in bikini"] 
res = filter(lambda s: 'maurice' in s.lower(), list) 
print(res) 

出力リレー:

['Maurice is smart', 'Maurice is dumb', 'maurice in bikini'] 
+0

正確には、リストを含めることが常に好ましいのはなぜですか? http://stackoverflow.com/a/1247490/2243104 – Reti43

+0

本当に素敵な投稿、私の答えを更新しました。 –

関連する問題