我有一个看起来像这样的元组列表;
ListTuples = [('192.168.1.100', '192.168.1.101'), ('192.168.1.100', '192.168.1.102'), ('192.168.1.100', '192.168.1.103'), ('192.168.1.103', '192.168.1.100')]
我想在元组的第一个元素与另一个元组的第二个元素匹配时删除元组,同时元组的第二个元素与同一其他元组的第一个元素匹配。 OutputList 将如下所示;
OutputList = [('192.168.1.100', '192.168.1.101'), ('192.168.1.100', '192.168.1.102')]
除了遍历所有元组进行比较并保存到新的元组列表之外,还有更简单的方法吗?
谢谢。
请您参考如下方法:
制作两个集合:第一个包含原始元组,第二个包含交换元素的元组。然后取两组的交集。这些是要删除的元组。使用所有元组创建一个新列表,但那些:
>>> ListTuples = [('192.168.1.100', '192.168.1.101'), ('192.168.1.100', '192.168.1.102'), ('192.168.1.100', '192.168.1.103'), ('192.168.1.103', '192.168.1.100')]
>>> set1 = set(ListTuples)
>>> set2 = set((e2, e1) for e1, e2 in ListTuples)
>>> to_remove = set1 & set2
>>> to_remove
set([('192.168.1.103', '192.168.1.100'), ('192.168.1.100', '192.168.1.103')])
>>> NewList = [t for t in ListTuples if t not in to_remove]
>>> NewList
[('192.168.1.100', '192.168.1.101'), ('192.168.1.100', '192.168.1.102')]
这将是 O(n),而搜索列表将是 O(n**2)。
