【问题标题】:Merging 2 arrays to get unique values in python合并2个数组以获得python中的唯一值
【发布时间】:2018-11-08 13:16:58
【问题描述】:

有 2 个 df 列,我想将它们合并在一起。由于大多数值在相应的行中是相等的,我想创建一个具有每行唯一值的列。

实现以下输出的最佳方法是什么?

示例:

list1 = ['','','dog','cat','cat']
list2 = ['dog','','dog','cat','']

输出:

combined_list = ['dog','','dog','cat','cat']

【问题讨论】:

  • 如果同一“行”中的两个字符串不同怎么办?
  • 如果 2 个字符串不同,我想将两个字符串放在一起(逗号分隔),例如 combine_list = ['dog','','dog,cat','cat','cat']

标签: python arrays string list


【解决方案1】:

我们可以在这里使用or 运算符:

[x or y for x, y in zip(list1, list2)]

鉴于第一项具有真实性False(这是空字符串的情况),它采用第二个元素。如果第一个元素具有真实性True,则采用第一个元素。

对于给定的样本输入,我们得到:

>>> [x or y for x, y in zip(list1, list2)]
['dog', '', 'dog', 'cat', 'cat']

如果两个元素都有非空字符串,那么它将采用第一个字符串。

【讨论】:

    【解决方案2】:

    您可以使用next + filter 的列表推导:

    list1 = ['','','dog','cat','cat']
    list2 = ['dog','','dog','cat','']
    
    L = [next(iter(filter(None, values)), '') for values in zip(list1, list2)]
    
    ['dog', '', 'dog', 'cat', 'cat']
    

    请注意,此解决方案优先考虑 first "Truthy" 值。它可以扩展到任意数量的输入列表。

    【讨论】:

    • 当我在同一行中有相同的字符串时,这非常有用。对于我有 2 个不同字符串的情况,我想将两个唯一字符串添加在一起,例如['狗','','狗,猫','猫','猫']。实现这一目标的最佳方法是什么?
    • 类似[','.join(filter(None, values)) for values in zip(list1, list2)]
    【解决方案3】:

    每个列表中的顺序重要吗?否则合并列表集合的列表:

    combined_list = list(set(list1))+list(set(list2))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多