2016-11-03 16 views
0

長さの異なる文字列を含むリストが2つあります。 これで、あるリストの文字列が他のリストの部分文字列であるかどうかを確認したいと思います。 stringlistと同じ長さの新しいリストを作成します。私がこれまで行ってきた何Python:2つの異なるリスト長を持つリストの文字列を比較する

string_list = ['expensive phone', 'big house', 'shiny key', 'wooden door'] 
substring_list = ['phone','door'] 

newlist=[] 
for i in string_list: 
    for j in substring_list: 
     if i in j: 
      newlist.append(j) 
print newlist 

だからそれはしかし、私が達成しようとしていること

newlist = ['phone', '-', '-', 'door'] 
+0

これは非常に私はあなたにヒントを与えてみましょう宿題のように見えます。私がjにいなければelse節を使ってみてください –

答えて

0

を次のようにリストである私に

newlist = ['phone', 'door']   

を与えますforループにはelseブロック。あなたは結果が第1のリストと同じ長さになりたい場合は、あなたがifでブレークを配置する必要があり

newlist=[] 
for i in string_list: 
    for j in substring_list: 
     if j in i: 
      newlist.append(j) 
      break 
    else: 
     newlist.append('-') 
print(newlist) 
# ['phone', '-', '-', 'door'] 

:あなたは、文字列が見つからない場合には'-'を追加するこのelseブロックを使用することができます2つの項目が文字列のいずれかに含まれている場合(例えば'expensive phone door')、結果のリストの長さを斜めにする2つの追加をしません。

breakは、アイテムが見つかったときにforelseブロックが実行されないようにします。

-1

簡単な変更は、この問題を解決:

newlist=[] 
for i in string_list: 
    found = False 
    for j in substring_list: 
     if j in i: 
      found = j 
      break 
    if found: 
     newlist.append(found) 
    else: 
     newlist.append("-") 
print newlist 

A(やや)よりPython的解決策は次のようになります。

newlist = [[j for j in substring_list if j in i][0] if any(j in i for j in substring_list) else "-" for i in string_list] 
関連する問題