首页 > 解决方案 > 每次我打印一个列表时,它都会打印元素 2 次。我怎样才能防止这种情况发生?

问题描述

import os
from netaddr import *
import sys
import socket
from pprint import pprint
from collections import defaultdict
import itertools
import bisect

    ip_list = []
    server_list = []
    while True:
        try:
            server = (input('> '))
            if server == 'q':
                break
            ip_addr = socket.gethostbyname(server)
        except socket.gaierror:
            print(server, 'can\'t find server/ip', '\n')

        ip_list.append(ip_addr)
        server_list.append(server)
        print(ip_list)

输出(在这种情况下我输入 2 个服务器并返回 2 个 IP):

['10.0.0.1', '10.0.0.2']

现在,当我将该列表插入到脚本的总体用途中时,它会两次打印出该列表。为简单起见,“网络”会拉出子网/路由列表,但我将忽略该代码,因为它与手头的问题无关。

    for ip_address in ip_list:
        if IPAddress(ip_address) in IPNetwork(network):
            print(ip_address)

输出:

10.0.0.1
10.0.0.2
10.0.0.1
10.0.0.2

如何使地址打印一次而不是两次?

标签: pythonlistnetworkingprinting

解决方案


在循环完成后执行print(ip_list),因此您只打印一次,而不是每次附加到它之后。

此外,您应该附加到try. 否则,当您收到错误时,您仍然会附加服务器,并且还会附加上一个服务器的地址。

ip_list = []
server_list = []
while True:
    try:
        server = (input('> '))
        if server == 'q':
            break
        ip_addr = socket.gethostbyname(server)
        ip_list.append(ip_addr)
        server_list.append(server)
    except socket.gaierror:
        print(server, 'can\'t find server/ip', '\n')

print(ip_list)
print(server_list)

推荐阅读