我正在尝试通过边学习边学习python,但是我的代码有问题。尝试执行代码,在其中输入IP的代码将检查IP是否在ips.txt文件中,但是当我添加例如“ 192.168.0.10”并且文件中已经是“ 192.168.0.100”时,它将显示,则txt文件中包含“ 192.168.0.10”,因为“ 10”是“ 100”编号的一部分。
相同的示例是“ dog”和“ dogs”,“ dog”基本上在“ dogs”内部,因此它将告诉您dog在文件中...
你能帮我吗?谢谢
IPs = IPs.read()
IP = input("Check IP: ")
if IP in IPs:
print("IP is in the list.")
else:
print("IP is not in the list.") ```
IPs.read()
产生一个字符串。这意味着当您执行时IP in IPs
,它会检查字符串是否IP
为的子字符串IPs
(它执行substring search
)。在你的情况,通知"" in IPs
,"1" in IPs
以及".1" in IPs
将所有计算为True
。
您想要的是IPs
一个字符串列表,可以通过以下方式实现:
IPs = IPs.read().splitlines()
这将读取输入并以换行符分隔字符串,因此如果文本文件包含:
192.168.0.10
192.168.0.9
192.168.0.7
IP将是:
["192.168.0.10", "192.168.0.9", "192.168.0.7"]
所以,现在,当你做IP in IPs
它会linear search
为价值IP
在IPs
。线性搜索需要O(n)
时间,这里n
是列表的长度。如果的顺序IPs
无关紧要,并且您要进行大量查找,建议您通过将列表转换为一组IPs = set(IPs.read().splitlines())
。这样,无论执行什么操作IP in IPs
,无论列表大小如何(即程序进行缩放),查找时间都是恒定的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句