在If语句中使用for循环迭代

时间:2019-09-13 10:29:08

标签: python for-loop if-statement

我有多个物品的清单。需要创建一个循环,以从列表中找到一个项目并将其打印出来。 如果未找到项目,则仅在找不到后才打印出来。

 for x in range(len(regs)):
    rex = regs[x]
    if re.match(rex,hostname):
        print (dev[x],'Regex matched')
        break
    else:
        print('wrong format')

当前,它多次打印出未找到的内容。 当它与正则表达式匹配时,它将在末尾打印出来。 我只希望If Else打印一次“错误格式”。

当前打印出错误的格式错误的格式错误的格式错误的格式 错误格式错误格式错误格式“ DeviceX正则表达式匹配”

5 个答案:

答案 0 :(得分:1)

elsefor一起使用。

一旦找到一项,您就会脱离for循环,下面的代码将可以正常工作:

for x in range(len(regs)):
    rex = regs[x]
    if re.match(rex,hostname):
        print (dev[x],'Regex matched')
        break
else:
    # Does not execute only when a break statement
    # is executed inside the for loop.
    print('wrong format')

答案 1 :(得分:0)

它被打印多次,因为在很多时候当前值都不匹配。解决此问题的一种简单方法是使用标志,如下所示:

value_found = False 

for x in range(len(regs)):
    rex = regs[x]
    if re.match(rex,hostname):
        print (dev[x],'Regex matched')
        value_found = True
        break

if not value_found:
    print('wrong_format')

答案 2 :(得分:0)

您可以按如下方式维护标志变量。

matched = False
for x in range(len(regs)):
    rex = regs[x]
    if re.match(rex, hostname):
        print(dev[x], "Regex matched!")
        matched = True
        break
if not matched:
    print("Wrong format")

答案 3 :(得分:0)

这应该可以解决您的问题。

flag = 0     
for x in range(len(regs)):
    rex = regs[x]
    if re.match(rex, hostname):
        print(dev[x], 'Regex matched')
        flag = 1
        break
if flag == 0:
    print('wrong format')

答案 4 :(得分:0)

我认为您可以使用以下综合列表将其缩短:

if len([r for r in regs if re.match(r, hostname)]) == 1:
  print(dev[regs.index([r for r in regs if re.match(r, hostname)][0])], 'Regex matched')
else:
  print('not found')