列表、条件和循环没有给出预期的结果[关闭]
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')]
【讨论】:
非常感谢!!所有这些解释都非常有用。我上个月刚开始编程,自学可能很困难。以上是关于列表、条件和循环没有给出预期的结果[关闭]的主要内容,如果未能解决你的问题,请参考以下文章