Python 2.7 用于循环覆盖的Python
以下是我在Python 3中的代码:Python 2.7 用于循环覆盖的Python,python-2.7,python-3.x,for-loop,overwrite,Python 2.7,Python 3.x,For Loop,Overwrite,以下是我在Python 3中的代码: firstNode =[134, 135] USAdetail =['134.250.7.8', '1.39.35.138', '100.43.90.10','101.43.90.10', '101.43.90.11'] for each in USAdetail: if each.split('.')[0] in firstNode: print ("successful") 我认为它应该打印出“successful”,因为其中有一个
firstNode =[134, 135]
USAdetail =['134.250.7.8', '1.39.35.138', '100.43.90.10','101.43.90.10', '101.43.90.11']
for each in USAdetail:
if each.split('.')[0] in firstNode:
print ("successful")
我认为它应该打印出“successful”,因为其中有一个“134”。然而,它似乎是被覆盖的,USADEATILE中的最后一个元素以“101”开头,这就是为什么它没有打印“successful”
我只是想知道如何更改代码,以确保USATEADETAIL中是否有以134/135开头的元素,它将成功打印出来。非常感谢 您需要强制转换为int,字符串
“134”
不等于整数134
:
if int(each.split('.')[0]) in firstNode:
或在列表中存储字符串:
firstNode =["134", "135"]
如果要查找if match并创建firstNode,可以使用它尝试匹配一组子字符串,如果我们在每个元素后添加一个
,我们将得到精确匹配:
USAdetail =['134.250.7.8', '1.39.35.138', '100.43.90.10','101.43.90.10', '101.43.90.11']
firstNode = ("134.", "135.")
if any(x.startswith(firstNode ) for x in USAdetail):
print("Successful")
或者将它们作为字符串存储在中,并在中使用:
USAdetail =['134.250.7.8', '1.39.35.138', '100.43.90.10','101.43.90.10', '101.43.90.11']
firstNode = {"134", "135"}
if any(x.split(".",1)[0] in firstNode for x in USAdetail):
print("Successful")
如果您不控制firstnode的创建,您可以坚持将强制转换为int并从firstnode创建一个集合:
USAdetail =['134.250.7.8', '1.39.35.138', '100.43.90.10','101.43.90.10', '101.43.90.11']
firstNode = [134, 135]
st = set(firstNode)
if any(int(x.split(".",1)[0]) in st for x in USAdetail):
print("Successful")
any
将在第一次匹配时短路,如果没有匹配,它将返回False,设置查找是O(1)
因此对于大量数据将是一个非常有效的解决方案