Python If循环与字符串长度测试不匹配

问题描述 投票:0回答:2

[此处第一篇文章,因此对于任何违反礼节的行为表示歉意。这个站点对我有很大的帮助,为此,谢谢!!

我有一个正在运行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',
.....

[此处第一篇文章,因此对于任何违反礼节的行为表示歉意。这个网站对我有很大的帮助,为此,谢谢!我有一个正在运行for循环的字符串列表。 ...

python string list if-statement enumerate
2个回答
0
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.