“ if”循环与字符串长度测试不匹配

时间:2020-01-19 22:38:39

标签: python string list if-statement enumerate

我有一个正在运行for循环的字符串列表。逻辑一直没有问题,但是我必须添加一个新的第一条if语句来检查其中的字符串长于特定长度的索引。即使我的某些长度显示的长度超过60,我似乎也无法使该语句匹配。在这里我在做什么错了?

代码如下:

for idx, x in enumerate(final_vlan_list_build2):
    length = len(final_vlan_list_build2[idx])
    print(length)
    print(type(length))
    if length >= 60:
        final_vlan_list_build2[idx] = final_vlan_list_build2[idx].replace(
            final_vlan_list_build2[idx], final_vlan_list_build2[idx] + "   default 1       none qtagged")
    elif 'qtagged' in x:
        final_vlan_list_build2[idx] = final_vlan_list_build2[idx]
    elif 'qtagged' and 'default' not in x:
        final_vlan_list_build2[idx] = final_vlan_list_build2[idx].replace(
            final_vlan_list_build2[idx], final_vlan_list_build2[idx] + "   default 1       none qtagged")
    else:
        final_vlan_list_build2[idx] = final_vlan_list_build2[idx].replace(
            final_vlan_list_build2[idx], (final_vlan_list_build2[idx] + '       none qtagged'))
print(final_vlan_list_build2)

仅供参考,每个索引的长度肯定显示超过60:

10
<class 'int'>
10
<class 'int'>
32
<class 'int'>
32
<class 'int'>
50
<class 'int'>
30
<class 'int'>
32
<class 'int'>
76
<class 'int'>
54
<class 'int'>
33
<class 'int'>
55
<class 'int'>
77
<class 'int'>
31
<class 'int'>
33
<class 'int'>
33
<class 'int'>
31
<class 'int'>
71
<class 'int'>
31

Partial input list:
['int g1/0/1', 'int g1/0/2', 'int g1/0/3  3999    default     ', 'int g1/0/4  3999    default     ', 'int g1/0/5   261    qtagged
 368    default   ', 'int g1/0/6   368    default   ', 'int g1/0/7  3999    default     ', 'int g1/0/8   258    qtagged        261
qtagged       3999    default     ', 'int g1/0/9   261    qtagged       3999    default     ', 'int g1/0/10   368    default     ', 'int g1/0/11   261    qtagged       3999    default     ', 'int g1/0/12   258    qtagged        261    qtagged       3999    default
 ', 'int g1/0/13   367    default   ', 'int g1/0/14  3999    default     ', 'int g
...

The partial output list:
['int g1/0/1   default 1       none qtagged', 'int g1/0/2   default 1       none qtagged', 'int g1/0/3  3999    default            none qtagged', 'int g1/0/4  3999    default            none qtagged', 'int g1/0/5   261    qtagged      368    default   ', 'int g1/0/6
 368    default          none qtagged', 'int g1/0/7  3999    default            none qtagged', 'int g1/0/8   258    qtagged        261    qtagged       3999    default        default 1       none qtagged', 'int g1/0/9   261    qtagged       3999    default     ', 'int g1/0/10   368    default            none qtagged', 'int g1/0/11   261    qtagged       3999    default     ', 'int g1/0/12   258    qtagged        261    qtagged       3999    default        default 1       none qtagged',
.....

2 个答案:

答案 0 :(得分:0)

您的问题不是因为如果长度> 60且x中没有'qtagged'和'default'时您执行相同的操作吗? 因此,您的结果不是因为长度,而是因为if'qtagged'和'default'不在x ...

答案 1 :(得分:0)

对不起,如果这很糟糕,但是您的代码确实很难阅读。这是同一件事,但有2处更改。首先,如果长度大于60,则将其替换为“ default 1 none qtagged”;其次,我将逻辑'qtagged' and 'default' not in x替换为'qtagged' not in x and 'default' not in x,因为这是我假设您要尝试的做法。

for idx, x in enumerate(final_vlan_list_build2):
    if len(final_vlan_list_build2[idx]) >= 60:
        final_vlan_list_build2[idx] = "   default 1       none qtagged"
    elif 'qtagged' in x:
        pass
    elif 'qtagged' not in x and 'default' not in x:
        final_vlan_list_build2[idx] += "   default 1       none qtagged"
    else:
        final_vlan_list_build2[idx] += '       none qtagged'
print(final_vlan_list_build2)