在名为“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
中的每个项目,或者我可能必须使用正则表达式来实现所需的结果。我很感激任何指示正确的方向,谢谢!
答案 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个元素,然后使用某些条件加入。