Python如何从元组列表直接提取去重IP地址无需手动遍历
Python提取元组列表中去重IP的实现方法
不需要手动编写遍历迭代的逻辑,直接用Python内置的语法特性一行代码就能实现需求。
基础实现(无序去重)
如果不需要保留IP的出现顺序,用集合自动去重的特性即可,执行效率最高:
ip_addrs_with_ports = [('192.168.1.1', '1234'),('192.168.1.1', '1235'),('192.168.1.3', '1236')] ip_addr = list(set(next(zip(*ip_addrs_with_ports))))
保序实现(保留首次出现顺序)
如果需要和原列表中IP第一次出现的顺序保持一致(Python普通集合是无序的),可以用字典去重的方案,兼容所有Python3版本,运行结果和你给出的预期完全一致:
ip_addr = list(dict.fromkeys(next(zip(*ip_addrs_with_ports))))
运行后得到的结果固定为['192.168.1.1', '192.168.1.3']。
原理说明
*ip_addrs_with_ports是Python的序列解包语法,会把列表中的每个元组拆成独立参数传给zip()函数zip()会自动把所有传入元组同位置的元素聚合到一起,用next()取第一个迭代结果,就能拿到所有IP地址组成的元组,不需要额外写循环遍历列表- 集合
set本身自带去重特性,传入重复元素会自动过滤;dict.fromkeys会以传入序列的元素为键生成字典,自动过滤重复键的同时保留元素第一次出现的顺序,最后把结果转成list即可。
内容的提问来源于stack exchange,提问作者user1993412
相关产品推荐
相关产品推荐

