【问题标题】:How to merge names with common elements in list?如何将名称与列表中的常见元素合并?
【发布时间】:2016-10-27 18:31:41
【问题描述】:

在一个名为“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 中的每个项目,或者我可能必须使用正则表达式来获得所需的结果。我将不胜感激任何正确方向的指示,谢谢!

【问题讨论】:

    标签: python regex list loops iteration


    【解决方案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']
    

    【讨论】:

    • 这行得通,谢谢!如果你不介意,你能解释一下在这里使用列表推导的好处是什么吗?我仍在尝试学习如何使用列表理解将循环嵌套在循环中。
    【解决方案2】:

    这是另一种尝试。

    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 个元素,然后使用某些条件加入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-29
      • 2019-05-22
      • 1970-01-01
      • 2013-09-03
      • 2014-06-23
      • 1970-01-01
      相关资源
      最近更新 更多