列表、条件和循环没有给出预期的结果[关闭]

Posted

技术标签:

【中文标题】列表、条件和循环没有给出预期的结果[关闭]【英文标题】:Lists, conditionals and loops don't give the result expected [closed] 【发布时间】:2014-09-24 20:27:42 【问题描述】:

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

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

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 以及每个字母的索引,但即使字母相同也不能重复。

【问题讨论】:

那么您的预期输出是什么,您会得到哪个输出? 我不明白你想在这里做什么。您的代码给出了[0, 1, 2, 1, 2, 1] - 期望什么?您是否尝试使用this 之类的方法来获取[4, 1, 5, 2, 6, 3] 你只想要所有字母的索引吗? indeces = range(len(word)) 怎么样?如果那是你想要的。 这看起来像是一个经典的 XY 问题。你到底想做什么?为什么你认为你想要所有字母的索引? 【参考方案1】:

这一行:

i = word.find(letter)

总是在word 中找到letter 的第一个匹配项,并且这一行:

start = indeces.index(i)

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

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)

这会一直查找,直到找到当前letter 的新i。如果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')]

【讨论】:

非常感谢!!所有这些解释都非常有用。我上个月刚开始编程,自学可能很困难。

以上是关于列表、条件和循环没有给出预期的结果[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

关闭和发送到通道之间的竞争条件

如果其他条件产生无限循环,则继续语句[关闭]

有没有可以直接给出答案的搜索引擎? [关闭]

在 foreach 循环中切换语句 - 没有得到预期的结果

从线程抛出异常并没有给出预期的结果

附加没有像预期的那样工作[关闭]