【问题标题】:Check for two identical string elements in a Python array检查 Python 数组中的两个相同的字符串元素
【发布时间】:2012-01-05 07:32:02
【问题描述】:

我有一个字符串数组如下:

[a1,a2,a1,a3,a2]

我想找到类似的字符串并将它们放入一个新的数组中,如下所示:

[a1,a2]

我是 Python 新手。请告诉我如何执行此操作。

谢谢。

【问题讨论】:

    标签: python arrays


    【解决方案1】:

    如果用数组表示python中的列表-:

    s = ["a1","a2","a1","a3","a2"]
    duplicates = [x for x in s if s.count(x) > 1]
    myl = list(set(duplicates))
    print myl
    

    输出['a1', 'a2']

    【讨论】:

    • 非常感谢 RanRag。你拯救了我的一天。 :)
    【解决方案2】:

    使用collections.Counter 的替代解决方案

    s = ["a1","a2","a1","a3","a2"]
    c=collections.Counter(s)
    print dict(c.most_common(len(c)-1)).keys()
    ['a1', 'a2']    
    

    【讨论】:

      【解决方案3】:

      这是 O(nlog(n)) 方法来查找重复项。初始列表已排序( O(nlog(n)) ),以便在相邻位置重复元素。然后简单的 O(n) 迭代可以找到重复项。

      s = ["a1","a2","a1","a3","a2"]
      s.sort() # sort changes initial list
      new_list = []
      prev = (None, False)
      for x in s:
          if prev == (x, False):
              new_list.append(x)
              prev = (x, True)
          else:
              prev = (x, False)
      print new_list
      

      【讨论】:

        【解决方案4】:

        虽然不知道性能如何 - 但它有效

        s = ["a1","a2","a1","a3","a2"]
        i=0
        common=[]
        for i in range(0,len(s)):
          if s[i] not in common and s[i] in s[i+1:]:
            common.append(s[i])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-02
          • 1970-01-01
          • 2014-07-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-17
          相关资源
          最近更新 更多