【问题标题】:Python remove similar items from listPython从列表中删除相似的项目
【发布时间】:2021-03-15 20:13:19
【问题描述】:

使用 python,在下面的列表中,我需要删除与国家代码重复的电话号码。

['(+44)45860787163','(+27)16345860787','45860787163','16345860787']

我尝试使用笛卡尔积和“in”运算符来比较字符串,但似乎没有任何效果。 我想保留完整的电话号码。

['(+44)45860787163','(+27)16345860787']

【问题讨论】:

  • 你有一个带有列表的字符串,还是一个字符串列表?
  • 我把它作为一个字符串列表
  • 你给出的例子是一个字符串?它包含在''
  • 我建议使用字符串列表进行编辑,假设这是一个错字。
  • 您尝试过正则表达式解决方案吗?

标签: python list reduce similarity


【解决方案1】:

使用regex,您可以提取您需要的部分,然后使用字典,您可以将数字与其前缀配对(并避免覆盖前缀)

value = '(+44)45860787163,(+27)16345860787,45860787163,16345860787'
phones = {}

for phone, prefix, number in re.findall(r"((\(\+\d+\))?(\d+))", value):
    if prefix != "" or number not in phone:
        phones[number] = prefix

result = ",".join(v + k for k, v in phones.items())
print(result)  # (+44)45860787163,(+27)16345860787

【讨论】:

    【解决方案2】:

    使用列表推导

    l = ['(+44)45860787163','(+27)16345860787','45860787163','16345860787']
    
    l = [x for x in l if '(' in x]
    
    print(l)
    
    >>> ['(+44)45860787163', '(+27)16345860787']
    

    如果您想更加安全,可以检查两个分号

    l = [x for x in l if '(' in x and ')' in x]
    
    

    【讨论】:

    • OP 希望保留(+xx) 的电话号码。这恰恰相反
    • 这是我对如何处理这个问题的第一个想法,但我认为 OP 正在寻求返回带有区号的数字
    【解决方案3】:

    首先,我们获取所有电话号码。然后,我们创建一个字典,其中没有扩展名的数字作为键,扩展名作为值。如果一个号码没有分机,则设置为无。之后,如果我们发现与扩展名相同的号码 None 被扩展名替换。最后,我们打印带有相应扩展名的号码。

    numbers = '(+44)45860787163,(+27)16345860787,45860787163,16345860787'.split(',')
    d = dict()
    for number in numbers:
        if ')' in number:
            prefix, n = number.split(')')
            prefix = prefix + ')'
        else:
            prefix = None
            n = number
        if n in d.keys():
            if d[n] == None:
                d[n] = prefix
        else:
            d[n] = prefix
    print([k if v == None else v + k for k,v in d.items()])
    

    【讨论】:

      【解决方案4】:

      你可以使用这个解决方案:

      number_string = '(+44)45860787163,(+27)16345860787,45860787163,16345860787'
      
      result = []
      
      for phone_number in number_string.split(','):
          if "(" in phone_number:
              result.append(phone_number)
      
      print(result)
      

      【讨论】:

        猜你喜欢
        • 2019-03-22
        • 2020-12-05
        • 2022-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        相关资源
        最近更新 更多