2016-06-14 6 views
-4

私はforループを使用して、文字列のリスト内の各要素の部分文字列を別の文字列リストの要素と比較します。forループをリスト内包語に変換する

mylist = [] 
for x in list1: 
    mat = False 
    for y in list2: 
     if x[:-14] in y: 
      mat = True 
    if not mat: 
     mylist.append(x) 

しかし、私はリスト内包に入れたい(ループが私の好みのためとして、簡潔でないため)しかしmatの計算でそれを行うための方法を見つけることができません。

私は上のバリエーションを試してみました:

mylist = [x for x in list1 if x[:-14] in list2] 

しかし、これは元のループと同じロジックではありません。元のforループをリストの理解に改革する方法はありますか?それが書かれているとおり

+4

if not条件に直接その定義を移動すると

mylist = [] for x in list1: mat = any((x[:-14] in y) for y in list2) if not mat: mylist.append(x) 

(このケースでは、あなたはanyを使用します)これはコンバージョンサービスではありません。あなたがこれを試してどこかでつかまえたら、[mcve]を提供してください。すべての 'for'ループがリスト内包となるわけではないことにも注意してください。 – jonrsharpe

+1

私は序文を編集しました。なぜなら、メタコンテンツは質問には属しておらず、人々はあなたに回答/リンクを与えるか否かにかかわらず、下降表示することができます。それはまったくのことではありません*「明らかにこれは質問されてより広い範囲の問題に適用できるようになっている」* **あなた自身の努力なしに、代わりに。 – jonrsharpe

+0

私はこのサイトで試した他のすべてのものへのリンクを提供しますか?それがあなたの声明になるでしょう。これは質問に答えるよりも、私が試したことを証明するために多くの努力を費やしている簡単な質問です。非常に不条理な反応...私は少なくとも30分の検索と試して投稿する前にしようとした – user3496060

答えて

2

を?:、いいえ、あなたは直接リストの内包としてそれを書き込むことはできません。

ただし、matの計算を1つの式に書き換えると、今では、変換するために、かなり簡単です

mylist = [] 
for x in list1: 
    if not any((x[:-14] in y) for y in list2): 
     mylist.append(x) 

mylist = [x for x in list1 if not any((x[:-14] in y) for y in list2)] 
+0

友人、あなたは質問のポイントを読んで、forループからリストの理解に変換する方法を含む簡潔な答えを提供しました。私はそれを試して、うまくいった。あなたの信仰=復活! – user3496060

+1

@ user3496060例から学ぶのがはっきりしていることから、私はあなたの質問を編集しましたので、私はあなたの信念を元通りにしてうれしいです(元は非常にローカライズされており、あなたの信仰をもう一度失うことがないように、それがよりよく受けられるような種類の質問のより良い考えをあなたに与えるかもしれないことを願っています! –

-1

あなたはこのような何かを探しているが

mylist = [x for x in list1 if x[:-14] not in list2] 
+0

確かに私は転記する前にこれを試しました(別の例を見つけました)。 – user3496060

関連する問題