gpt4 book ai didi

Python 检查元组的相等性

转载 作者:太空宇宙 更新时间:2023-11-03 14:09:39 24 4
gpt4 key购买 nike

我有一个源和目标 ip 的 numpy 数组

consarray
array([['10.125.255.133', '104.244.42.130'],
['104.244.42.130', '10.125.255.133']], dtype=object)

实际数组比这大得多。

我想从数组中创建一组唯一的连接对:

在给定的例子中:很明显,numpy 数组的两行都是同一连接的一部分(只是 src 和目标是互换的,所以它分别是传出和传入)。

我尝试创建一组独特的元组。像这样:

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')。

最佳答案

您可以在生成元组之前应用排序:

conset = set(map(lambda x: tuple(sorted(x)), consarray))

或者使用fronzensets 代替元组:

conset = set(map(frozenset, consarray))

要保证保留第一项而不插入第二项,您可以使用常规 for 循环:

conset = set()
for x in consarray:
x = frozenset(x)
if x in conset:
continue
conset.add(x)

关于Python 检查元组的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39894363/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com