在for循环中跳过索引,而我不希望发生

时间:2019-05-09 07:34:57

标签: python-3.x

所以我有这段代码:

lst = ["kjøres", "kjørt", "kjørende", "kjører", "kjørte", "kjørte", "kjøre", "kjørt", "kjørt", "kjørte", "kjørt", "kjør"]
soutLst = []

for i in lst:
    holder = str(i + " - index: " + str(lst.index(i)))
    if holder not in soutLst:
        soutLst.append(str(i + " - index: " + str(lst.index(i))))

    else :
        print(holder + " not in  soutLst")

print("----------")
for x in soutLst:
    print(x)

我得到以下输出:

kjørte - index: 4   not in  soutLst
kjørt - index: 1   not in  soutLst
kjørt - index: 1   not in  soutLst
kjørte - index: 4   not in  soutLst
kjørt - index: 1   not in  soutLst
----------
kjøres - index: 0
kjørt - index: 1
kjørende - index: 2
kjører - index: 3
kjørte - index: 4
kjøre - index: 6
kjør - index: 11

并且您可以看到它跳过了一些索引,您知道如何重写以将所有字符串添加到soutLst列表中吗?我认为这是因为Lst中的某些元素相同,但是我找不到解决方法。

它应该在soutLst中显示所有12个元素

此外,当我尝试列出未包含在最终for语句中的内容时,它只会显示相同的内容

3 个答案:

答案 0 :(得分:0)

不确定为什么要创建holder字符串,检查它是否存在于soutLst中,并且还有一个else,原因是不确定的

您可以使用enumerate代替所有这些,当您遍历索引时,它会同时为您提供索引和列表中的值,并使用它来创建soutLst

lst = ["kjøres", "kjørt", "kjørende", "kjører", "kjørte", "kjørte", "kjøre", "kjørt", "kjørt", "kjørte", "kjørt", "kjør"]
soutLst = []

for idx, item in enumerate(lst):
    soutLst.append(item + " - index: " + str(idx))

print("----------")
for x in soutLst:
    print(x)

输出将为

----------
kjøres - index: 0
kjørt - index: 1
kjørende - index: 2
kjører - index: 3
kjørte - index: 4
kjørte - index: 5
kjøre - index: 6
kjørt - index: 7
kjørt - index: 8
kjørte - index: 9
kjørt - index: 10
kjør - index: 11

答案 1 :(得分:0)

所以我自己重写了它,并把它哑了下来,显然我把这个问题弄得太复杂了: 这是一种可以满足我需求的解决方案:

lst = ["kjøres", "kjørt", "kjørende", "kjører", "kjørte", "kjørte", "kjøre", "kjørt", "kjørt", "kjørte", "kjørt", "kjør"]

for i in range(len(lst)):
    print(str(lst[i] + " - index: " + str(i)))

哪个输出如下:

kjøres - index: 0
kjørt - index: 1
kjørende - index: 2
kjører - index: 3
kjørte - index: 4
kjørte - index: 5
kjøre - index: 6
kjørt - index: 7
kjørt - index: 8
kjørte - index: 9
kjørt - index: 10
kjør - index: 11

答案 2 :(得分:0)

我看到python列表lst中有重复项。既然您已有条件:

if not holder in soutLst:
    soutLst.append(str(i + " - index: " + str(lst.index(i))))

,这将避免将除了第一次出现的那些重复项添加到另一个python列表soutLst中。另外,我建议您使用/更正日志记录,如下所示:

for i in lst:
    holder = str(i + " - index: " + str(lst.index(i)))
    if holder not in soutLst:
        soutLst.append(str(i + " - index: " + str(lst.index(i))))
    else :
        print(holder + " already found in  soutLst")

现在更有意义了。