首页 > 解决方案 > 在 Python 中解释了这一行,其中条件位于范围规范之后。

问题描述

我无法indexes =[ s.index(l) for l in letters if s.count(l) == 1]从下面的代码中解释

class Solution:
    def firstUniqChar(self, s):
        """
        :type s: str
        :rtype: int
        """
        letters = 'abcdefghijklmnopqrstuvwxyz'
        indexes =[ s.index(l) for l in letters if s.count(l) == 1]
        return min(indexes) if len(indexes) > 0 else -1

看起来它正在通过字符串 s,如果来自 letts 的字母在字符串 s 中,它会记录该索引位置的位置。然后,如果该索引的计数等于 1,则它仅返回索引。但是我尝试在该行中没有条件的情况下运行代码

indexes =[ s.index(l) for l in letters ]

它返回一个错误

'ValueError:找不到子字符串'

这是我用来实例化和运行该功能的方法

sol = Solution()
sol.firstUniqChar('loveleetcode')

标签: python

解决方案


您可能想以不同的方式重写难以理解的部分,这个:

indexes =[ s.index(l) for l in letters if s.count(l) == 1]

变成了这个(我也用'c'替换了难以阅读的小写'l'(如'character'):

indexes = []
for c in letters :
    if s.count(c) == 1 :    # check if 's' contains a unique 'c'
        indexes.append( s.index(c) )

所以,你看,如果你删除if s.count(c) == 1条件,它会尝试查找s所有可能的小写字母,而不仅仅是那些只包含s一次的小写字母,一旦找不到字母就会给你例外。


推荐阅读