字母的索引是唯一的,字母在字典中首先出现。例如:word='missippi',正确答案应该是{'m':0,'i':1,'s':2,'p':8}
我试着写“Python”代码:
dict = {word[i]:i for i in range(len(word)) if word[i] not in dict.keys()}
然而,我得到的是:{'I':10,'m':0,'p':9,'s':6}, 这就好像dict没有更新,并且在调用if语句时仍然是空的。在
一个普通的for循环做了正确的事情:
^{pr2}$输出:{'i':1,'m':0,'p':8,'s':2}
那为什么呢?对于这个问题,是否有一个python优雅的代码?一般来说,在列表/字典理解中,我应该只把“静态”变量放在if语句中吗?在
@BrenBarn已经给出了一个很好的解释。我只演示使用
find()
方法。此方法从给定的string
返回char
的第一个出现索引。在你不能用理解来引用它正在创建的dict,因为dict是在理解完成之后才创建的。在
一般来说,你做不到这种理解。在理解中,每个值应该只依赖于迭代中的一个值。但在计算中,每个值都取决于之前所有值的结果(通过它们对创建的dict的影响)。在
对于您的具体示例,有一种更简单的方法,因为您想要的结果实际上并不依赖于以前的值。您只需要单词中每个字符的第一次出现,这可以直接执行:
在这个版本中,稍后出现的字符“覆盖”以前的值,但它们用相同的值覆盖,因此没有效果。更好的版本是:
^{pr2}$它只迭代单词中唯一的字符,而不是所有字符。在
相关问题 更多 >
编程相关推荐