这是我在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")
我认为它应该打印出来"成功"因为有一个" 134"在USAdetail。然而,它似乎是覆盖,而且USAdetail中的最后一个元素以" 101"开头,这就是为什么它不打印"成功"。
我只是想知道如何更改代码以确保USAdetail中有任何以134/135开头的元素,它会打印成功。非常感谢!
答案 0 :(得分:3)
你需要强制转换为int,字符串"134"
不等于整数134
:
if int(each.split('.')[0]) in firstNode:
或在列表中存储字符串:
firstNode =["134", "135"]
如果您想查找any是否匹配并且您创建 firstNode ,则可以使用str.startswith,如果我们添加,可以使用子串的元组来尝试匹配在每个元素之后.
我们将完全匹配:
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")
或者将它们存储为set中的字符串并使用in
:
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转换为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)
,因此对于大量数据将是一个非常有效的解决方案。