Python 从列表中移除相似的 URL

0 投票
3 回答
693 浏览
提问于 2025-04-16 21:39

我刚开始学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 个回答

1

这个问题可能是因为你还没有搞清楚两个网址相似到底是什么意思。我们无法帮你解决这个问题,因为只有你自己知道你的具体需求。不过,一旦你弄明白了,后面的事情就简单多了。处理这个问题有两种方法:

  • 如果你的相似性关系是传递的,也就是说,如果 similar(a,b) 和 similar(b,c) 那么就意味着 similar(a,c) 对于所有的网址 abc 都成立,那么你就可以把每个网址转换成一个标准形式。只有当两个网址的标准形式相等时,它们才算相似。所以在这种情况下,最简单的做法就是把每个网址转换成标准形式,然后从这些标准网址中创建一个集合:

    set(canonical(u) for u in myList)
    
  • 如果你的相似性关系不是传递的,那事情就会变得复杂了,因为可能会出现像A和B相似,B和C相似,但A和C不相似的情况。那么问题就变成了,在这个例子中,你希望在去掉重复项的列表中包含哪些网址?你会包括A和C,因为它们彼此不相似,还是只包括B,因为你认为A和C都是B的相似重复项?在这种情况下,根据你想如何处理这种“模糊”的情况,有各种算法可以使用——但我们需要知道你的具体需求才能推荐合适的方案。

2

如果你觉得相似性就是在“\”这个地方的不同,那么你可以使用集合(这里有教程) 还有这里来从你的列表中去掉重复的项,因为:

集合是一种无序的、包含不同元素的集合。常见的用途包括检查某个元素是否在集合中、从序列中去掉重复项,以及进行一些数学运算,比如交集、并集、差集和对称差集。

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. 首先,去掉最后的斜杠
  2. 列出项目

去掉重复项:

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

撰写回答