比较列表和子列表

2024-10-01 13:37:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个列表:

lista = ['1.2.3.4', '2.3.4.5', '3.4.5.6'] # 12,000 IP's
listb = [['1.2.3.4', 'info', 'moreinfo', 'moremoreinfo'], ['2.3.4.5', 'info', 'moreinfo', 'moremoreinfo']] # 1.8m IP's + info

我在找一种方法来获取lista,如果这个ip存在于listb中,请告诉我它的所有信息。在

我试过循环,但速度非常慢:

^{pr2}$

有什么建议可以加快速度吗?在


Tags: 方法ipinfo信息列表速度建议lista
3条回答

您可以将lista转换为一个集合,用于快速成员资格测试,然后只需循环listb来选择lista中的任何一个:

lista_set = set(lista)
for item in listb:
    if item[0] in lista_set:
        print item

下一步是将listb转换为字典:

^{pr2}$

现在您可以使用集合来挑选出lista_set和{}中的两个:

for match in listb_dict.viewkeys() & lista_set:
    print match, listb_dict[match]

你应该把数据转换成更适合搜索的格式:字典。在

ip_info = {info[0]: info[1:] for info in listb}

然后,您可以非常快速地查找有关特定IP的信息。在

^{pr2}$
lista = ['1.2.3.4', '2.3.4.5', '3.4.5.6']
listb = [['1.2.3.4', 'info', 'moreinfo', 'moremoreinfo'],
         ['2.3.4.5', 'info', 'moreinfo', 'moremoreinfo']]

listb转换为字典

^{pr2}$

迭代lista并在dictb中查找条目

for elem in lista:
    print dictb.get(elem)

['info', 'moreinfo', 'moremoreinfo']
['info', 'moreinfo', 'moremoreinfo']
None

相关问题 更多 >