2017-07-11 7 views
0

私には問題があり、適切で良い解決策を得ることができません。ここでPy3複数の文字列で一般的な単語を探す

は事ですが、私はアドレスが含まれている私のリストを、持っている:

addresses = ['Paris, 9 rue VoltaIre', 'Paris, 42 quai Voltaire', 'Paris, 87 rue VoLtAiRe'] 

そして、私は治療後に取得したい:

to_upper_words = ['paris', 'voltaire'] 

「パリ」と「ヴォルテール」の中にあるので、すべての弦。

目標は、上にすべての一般的な単語であり、例えば結果:

'PARIS、343 BOULEVARD SAINT-GERMAIN'

'PARIS、458 BOULEVARD SAINT-GERMAIN'

「パリ'、' Boulevard '、' Saint-Germain 'はすべての文字列(この場合は2つ)に共通しているため大文字です。

私は複数の解決策を見つけましたが、2つの文字列についてしか見つかりませんでした。結果はN文字列に適用すると醜い結果になりました。

誰でも手伝っていただけたら...

ありがとうございます!

+0

すべての文字列に共通の単語だけを大文字で表示しますか?したがって、* rue *ではなく、例えば上の真ん中の文字列には表示されないためです。 –

答えて

1

空白に分割するだけで単語を選択できるようにカンマを削除します。次に、設定された交差点を使用してすべての住所に共通の単語を見つけます。 (私のコレクション、すなわちモントリオールにはこのような単語が1つしかありません)。ここでは、共通の単語をそれぞれの大文字に置き換えた元のアドレスコレクションを調べます。これを行う際に最も間違っているのは、リスト内の個々の値に値を割り当てることです。しかし、実際にはこれらはコピーであるため、変更した値をaddressses[i]に割り当てることにしました。

>>> addresses = [ 'Montréal, 3415 Chemin de la Côte-des-Neiges', 'Montréal, 3655 Avenue du Musée', 'Montréal, 3475 Rue de la Montagne', 'Montréal, 3450 Rue Drummond' ] 
>>> sans_virgules = [address.replace(',', ' ') for address in addresses] 
>>> listes_de_mots = [sans_virgule.split() for sans_virgule in sans_virgules] 
>>> mots_en_commun = set(listes_de_mots[0]) 
>>> for liste in listes_de_mots[1:]: 
...  mots_en_commun = mots_en_commun.intersection(set(liste)) 
... 
>>> mots_en_commun 
{'Montréal'} 
>>> for i, address in enumerate(addresses): 
...  for mot in list(mots_en_commun): 
...   addresses[i] = address.replace(mot, mot.upper()) 
...   
>>> addresses 
['MONTRÉAL, 3415 Chemin de la Côte-des-Neiges', 'MONTRÉAL, 3655 Avenue du Musée', 'MONTRÉAL, 3475 Rue de la Montagne', 'MONTRÉAL, 3450 Rue Drummond'] 
+0

完璧!それは正常に動作します –

関連する問題