我似乎无法在SO上找到关于我的特定问题的问题,所以请原谅我,如果以前曾经问过这个问题的话。
无论如何,我正在编写一个脚本来遍历一组URL,并给我一个包含唯一参数的唯一网址列表。
我遇到的麻烦实际上是比较参数以消除多个重复。这有点难以解释,所以一些例子可能是有序的:
说我有一个像这样的URL列表
我将每个URL解析为列表列表,所以最终我有一个这样的列表:
sort = [['id', 'title'], ['id', 'c', 'title'], ['b', 'id']]
我想找到一种方法,在我的列表中只给出2个列表:
new = [['id', 'c', 'title'], ['b', 'id']]
到目前为止,我已经有点了解一点,我知道我已经接近了,而且我已经连续几天抨击我的头了:(。有什么想法吗?
提前致谢! :)
编辑:抱歉不清楚!此脚本旨在为后期抓取的Web应用程序查找唯一的入口点。基本上,如果URL有3个唯一的入口点['id', 'c', 'title']
我更喜欢与2个唯一入口点相同的链接,例如:
['id', 'title']
因此,如果较小的变量位于较大的集合中,我需要新的列表列表来消除2的列表并且更喜欢只有3的列表。如果还不清楚请告诉我,谢谢你的快速回复! :)
答案 0 :(得分:5)
我假设子集被认为是“重复”(当然是非交换的)......
首先将每个查询转换为一个集合,并将它们从最大到最小排序。然后,如果每个查询不是已添加查询的子集,请将其添加到新列表中。由于任何集合都是其自身的子集,因此该逻辑涵盖完全重复:
a = []
for q in sorted((set(q) for q in sort), key=len, reverse=True):
if not any(q.issubset(Q) for Q in a):
a.append(q)
a = [list(q) for q in a] # Back to lists, if you want