列表,条件和循环不会给出预期的结果

时间:2014-08-01 15:23:48

标签: python indexing

我很确定它一定是愚蠢的东西,但已经有好几个小时没有得到为什么它不起作用,现在我必须知道。

我知道如何以另一种方式获得结果,但我想学习为什么这种方式不起作用的机制。

word="patata"
indeces=[]

for letter in word:
    i = word.find(letter)
    if i in indeces:
        start = indeces.index(i)
        index=word.find(letter,start)
        indeces.append(index)
    else:
       indeces.append(i)


print indeces

问题是我希望列表indeces具有每个字母的索引,但即使字母是相同的,也不能两次。

1 个答案:

答案 0 :(得分:0)

这一行:

i = word.find(letter)

始终在letter中找到word的第一个匹配项,此行:

start = indeces.index(i)

始终在i中找到indeces的第一个匹配项。然后,这一行:

index=word.find(letter,start)

包含 start,所以只需立即找到相同的字母!

使当前代码工作的唯一方法是引入while循环,并在最后一次出现后启动

for letter in word:
    i = word.find(letter)
    while i in indeces:
        i = word.find(letter, i+1)
    indeces.append(i)

这会一直在寻找,直到找到当前i的新letter。如果i不在indeces开头,则循环永远不会运行。


话虽如此,这是一种非常低效的方法;如果您希望索引使用range

>>> range(len("patata"))
[0, 1, 2, 3, 4, 5]

如果您希望字母及其索引使用enumerate

>>> list(enumerate("patata"))
[(0, 'p'), (1, 'a'), (2, 't'), (3, 'a'), (4, 't'), (5, 'a')]