python - 在for循环中使用len的问题

时间:2016-05-19 08:52:33

标签: python

我有一个清单

listA = ["Hello", "World", "in", "a", "frame"]

我有这个代码,它应该正常工作

a = 0
for nb in listA:
    if a == 0:
        print("*"*10).center(20)
    a += 1
    if len(listA[nb]) == 2:
        print("*   " + nb + "   *").center(20)
    elif len(listA[nb]) == 1:
        print("*   " + nb + "    *").center(20)
    else:
        print("* " + nb + " *")
    if a == len(listA):
        listA[-1]
        print("*"*10).center(20)
    #print(a)

然而,我有这个错误

  

TypeError:list indices必须是整数,而不是str

看着它,我已经将nb改为整数并且它有效。不过,当我正在做len(listA[1])时,我有5个。

我的错误在哪里?

由于

4 个答案:

答案 0 :(得分:2)

nbstring中的listA。因此listA[nb]无效,您只需使用nb

a = 0
for nb in listA:
    if a == 0:
        print("*"*10).center(20)
    a += 1
    if len(nb) == 2:
        print("*   " + nb + "   *").center(20)
    elif len(nb) == 1:
        print("*   " + nb + "    *").center(20)
    else:
        print("* " + nb + " *")
    if a == len(listA):
        listA[-1]
        print("*"*10).center(20)
    #print(a)

答案 1 :(得分:2)

作为其他2个答案的补充,您有一行listA[-1]

我不知道你期望它做什么,但它什么也没做。它只返回listA中的最后一个元素。

答案 2 :(得分:1)

你的错误不是len,而是 listA [nb] 。您遍历列表,因此 nb 是一个字符串。我不确定你要做什么,只需要 len(nb)来获取列表项的长度。

答案 3 :(得分:1)

for nb in listA将迭代listA的每个元素,因此nb始终是“current”元素的类型。 我不完全确定你想要做什么,但是如果你想知道/使用listA中元素的索引,你可以使用enumerate()

listA = ["Hello", "World", "in", "a", "frame"]
for idx, nb in enumerate(listA):
    if idx == 0:
        print("*"*10).center(20)
    if len(listA[idx]) == 2:
        print("*   " + nb + "   *").center(20)
    elif len(listA[idx]) == 1:
        print("*   " + nb + "    *").center(20)
    else:
        print("* " + nb + " *")
    if idx == len(listA):
        # listA[-1] # this does nothing at all, just returns the last element of the list
        print("*"*10).center(20)