Python从列表中删除类似的URL

时间:2011-07-16 05:12:24

标签: python list

所以我对python很新。但是,如果您帮助解决这个小问题,我会从列表中删除类似的重复项。

所以我有一个网址列表:myList = ['http://www.mywebsite.com/shoes', 'http://wwww.yourwebsite.com/', 'http://www.mywebsite.com/shoes/']

我想删除类似的网址,因为您可以看到http://www.mywebsite.com/shoeshttp://www.mywebsite.com/shoes/几乎相同。我想删除其中一个(我不关心哪一个)但保留另一个。基本上从列表中删除副本。我举个例子。但我甚至不知道从哪里开始。

任何见解都会有很大帮助。

3 个答案:

答案 0 :(得分:2)

如果您的相似性与'\'相同,那么您可以使用集(read tutorial here) and here从列表中删除重复项:

  

set对象是不同的hashable对象的无序集合。   常见用途包括成员资格测试,从中删除重复项   序列,并计算数学运算,如交集,   联合,差异和对称差异。

myList = ['http://www.mywebsite.com/shoes', 'http://wwww.yourwebsite.com/', 'http://www.mywebsite.com/shoes/']

set(x.lstrip('\') for x in myList) # will return a set of unique urls

# In case you need list
myList = list(set(x.rstrip('\') for x in myList))

答案 1 :(得分:1)

你可以这样做:

  1. 首先,删除最后一个斜杠
  2. 列表项
  3. 删除重复项:

    set(map(lambda url: url.rstrip('/'), myList))
    

答案 2 :(得分:1)

问题可能是您还没有弄清楚两个网址相似的含义。我们无法帮助您,因为只有您知道您的要求是什么。但是,一旦你弄明白了,剩下的就够了。有两种方法可以做到:

  • 如果您的相似性关系具有传递性 - 也就是说,如果similar(a,b) and similar(b,c)意味着所有网址similar(a,c)ab的{​​{1}} - 然后就可以将每个URL转换为规范形式。当且仅当它们的规范形式相同时,两个URL将是相似的。因此,在这种情况下最简单的方法是将每个URL转换为规范形式,然后创建以这种方式获得的规范URL的集合:

    c
  • 如果你的相似关系不是传递性的,那么事情变得非常棘手,因为你可以让像A这样的情况类似于B而B类似于C,但是A与C不相似。那么问题就变成了在这个例子中,你希望在列表中包含哪些重复项被删除?你会包括A和C,因为它们彼此不相似,或者你只包括B,因为你认为A和C都有类似的重复吗?在这种情况下,根据您想要处理这种“模糊”情况的方式,您可以使用各种算法 - 但同样,我们需要知道您推荐任何内容的确切要求。