所以我对python很新。但是,如果您帮助解决这个小问题,我会从列表中删除类似的重复项。
所以我有一个网址列表:myList = ['http://www.mywebsite.com/shoes', 'http://wwww.yourwebsite.com/', 'http://www.mywebsite.com/shoes/']
我想删除类似的网址,因为您可以看到http://www.mywebsite.com/shoes和http://www.mywebsite.com/shoes/几乎相同。我想删除其中一个(我不关心哪一个)但保留另一个。基本上从列表中删除副本。我举个例子。但我甚至不知道从哪里开始。
任何见解都会有很大帮助。
答案 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)
你可以这样做:
删除重复项:
set(map(lambda url: url.rstrip('/'), myList))
答案 2 :(得分:1)
问题可能是您还没有弄清楚两个网址相似的含义。我们无法帮助您,因为只有您知道您的要求是什么。但是,一旦你弄明白了,剩下的就够了。有两种方法可以做到:
如果您的相似性关系具有传递性 - 也就是说,如果similar(a,b) and similar(b,c)
意味着所有网址similar(a,c)
,a
,b
的{{1}} - 然后就可以将每个URL转换为规范形式。当且仅当它们的规范形式相同时,两个URL将是相似的。因此,在这种情况下最简单的方法是将每个URL转换为规范形式,然后创建以这种方式获得的规范URL的集合:
c
如果你的相似关系不是传递性的,那么事情变得非常棘手,因为你可以让像A这样的情况类似于B而B类似于C,但是A与C不相似。那么问题就变成了在这个例子中,你希望在列表中包含哪些重复项被删除?你会包括A和C,因为它们彼此不相似,或者你只包括B,因为你认为A和C都有类似的重复吗?在这种情况下,根据您想要处理这种“模糊”情况的方式,您可以使用各种算法 - 但同样,我们需要知道您推荐任何内容的确切要求。