简单但效率低下的(
O(n²))方法(感谢@RafałDowgird!):
>>> uniq=[]>>> for i in l: # O(n), n being the size of l... if not (i in uniq or tuple([i[1], i[0], i[2]]) in uniq): # O(n)... uniq.append(i) # O(1)... >>> uniq[('192.168.1.100', '192.168.1.101', 'A'), ('192.168.1.103', '192.168.1.101', 'B'), ('192.168.1.104', '192.168.1.100', 'C')]使用Python的更有效的方法
Set:
>>> uniq=set()>>> for i in l: # O(n), n=|l|... if not (i in uniq or tuple([i[1], i[0], i[2]]) in uniq): # O(1)-Hashtable... uniq.add(i)... >>> list(uniq)[('192.168.1.104', '192.168.1.100', 'C'), ('192.168.1.100', '192.168.1.101', 'A'), ('192.168.1.103', '192.168.1.101', 'B')]您可以根据最后一个元素对其进行排序:
>>> sorted(list(uniq), key=lambda i:i[2])[('192.168.1.100', '192.168.1.101', 'A'), ('192.168.1.103', '192.168.1.101', 'B'), ('192.168.1.104', '192.168.1.100', 'C')]


