我有一个numpy数组,包含源IP和目标IP。
consarray
array([['10.125.255.133', '104.244.42.130'],
['104.244.42.130', '10.125.255.133']], dtype=object)
实际数组比这个要大得多。
我想从数组中创建一组唯一的连接对:
在给定的例子中,很明显NumPy数组的两行都是同一个连接的一部分(只是源和目标互换了,因此它是出站和入站)。
我尝试创建一组唯一的元组,就像这样:
conset = set(map(tuple,consarray))
conset
{('10.125.255.133', '104.244.42.130'), ('104.244.42.130', '10.125.255.133')}
我希望的是将('10.125.255.133','104.244.42.130')和('104.244.42.130','10.125.255.133')视为相同,以便只有其中一个出现在集合中。请问我该如何做?
编辑:
有一些很好的答案,但实际上我还有另一个要求,
我希望始终保留第一次出现的连接,而不考虑IP地址。
在上面的例子中:('10.125.255.133','104.244.42.130')首先出现,所以它是传出连接,我想保留这个连接。
如果上面的例子改变为:
consarray
array(['104.244.42.130', '10.125.255.133']],
[['10.125.255.133', '104.244.42.130'],dtype=object)
我希望 ('104.244.42.130','10.125.255.133') 能够保留。
set(frozenset(el) for el in consarray)
这样写是否符合你的需求? - Jon Clements