2016-06-25 6 views
2

「共通」というリストには、共通の要素を持つ名前の束があります。例えば、私のリストは、その中にこれらの名前を持っているリスト内の共通要素に名前をマージする方法はありますか?

私はほとんどのPython的な方法で共通の要素を持っているすべての名前をマージすることができるようにしたい
common = ['Jeremy Paul', 'Paul Stevens', 'John Jordan', 'Jordan Smith', 
'Jordan Walker', 'Walker Marshall'] 

(しない限り、ライブラリやリストの内包を使用する必要がありますする必要はありません必要)。共通の要素は、1つの文字列のファーストネームで、次の文字列のファーストネームです。例として、これは、私は結果があることを望むものではありません:

result = ['Jeremy Paul Stevens', 'John Jordan Smith', 'John Jordan Walker', 
'Jordan Walker Marshall'] 

は、私が唯一の各文字列の三つの言葉を持っているしたいので、何John Jordan Walker Marshallまたは以上の3人の名前を使って何。

私はこれをPythonで行うことができる方法はありますか?私はcommonの各項目を調べるためにいくつかのループまたはフォームを使用する必要があると仮定しています。または、希望の結果を得るために正規表現を使用する必要があります。私は右の方向に、感謝の任意のポインタを感謝したい!

答えて

4

アプローチ:各文字列を構成部分に分割し、各項目の部分をペアにし、第1の対が第2の対の第1の部分で終わるかどうかチェックする。以下のような

何か:ここ

>>> common = ['Jeremy Paul', 'Paul Stevens', 'John Jordan', 'Jordan Smith', 
... 'Jordan Walker', 'Walker Marshall'] 
>>> parts = [x.split() for x in common] 
>>> [" ".join([x[0], x[1], y[1]]) for x in parts for y in parts if x[1] == y[0]] 
['Jeremy Paul Stevens', 'John Jordan Smith', 'John Jordan Walker', 'Jordan Walker Marshall'] 
+0

これは、感謝しました!あなたが気にしないなら、ここでリストの理解を使うことの利点は何かを説明できますか?私はまだリスト内包をループ内に入れ子にする方法を学んでいます。 – bear16

0

は、代替の試みです。

In [6]: b = [i.split() for i in common] 
In [7]: [' '.join(x[0])+' '+x[1][-1] for x in [b[n:n+2] for n in range(0, len(b), 2)]] 
Out[7]: ['Jeremy Paul Stevens', 'John Jordan Smith', 'Jordan Walker Marshall'] 

概念:2つの要素にグループ化し、いくつかの条件を使用して結合します。

関連する問題