我很确定它一定是愚蠢的东西,但已经有好几个小时没有得到为什么它不起作用,现在我必须知道。
我知道如何以另一种方式获得结果,但我想学习为什么这种方式不起作用的机制。
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 :(得分: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')]