如何将名称与列表中的公共元素合并?

时间:2016-06-25 05:15:22

标签: python regex list loops iteration

在名为“common”的列表中,我有一堆具有共同元素的名称。例如,我的列表中包含这些名称

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

我希望能够以最Pythonic的方式合并所有具有共同元素的名称(除非必要,否则不希望使用库或列表推导)。公共元素是一个字符串中的名字和后面的字符串中的姓氏。举个例子,这就是我想要的结果:

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

我只想在每个字符串中有三个单词,所以没有John Jordan Walker Marshall或任何名称超过三个的单词。

我有什么方法可以用Python做到这一点?我假设我需要使用一些循环或迭代形式来遍历common中的每个项目,或者我可能必须使用正则表达式来实现所需的结果。我很感激任何指示正确的方向,谢谢!

2 个答案:

答案 0 :(得分:4)

方法:将每个字符串拆分为组成部分,将每个项目的部分配对,并检查第一对是否以第二对的第一部分结束 - 如果是这样,则插入列表中。

类似的东西:

>>> 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']

答案 1 :(得分: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个元素,然后使用某些条件加入。