在Python中解释了这一行,其中条件位于范围规范之后。
如果s.count(l)==1,我很难从下面的代码中解释在Python中解释了这一行,其中条件位于范围规范之后。,python,Python,如果s.count(l)==1,我很难从下面的代码中解释索引=[s.index(l)表示l的字母] class Solution: def firstUniqChar(self, s): """ :type s: str :rtype: int """ letters = 'abcdefghijklmnopqrstuvwxyz' indexes =[ s.index(l) for l in l
索引=[s.index(l)表示l的字母]
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,它只返回索引。但是我试着在没有条件的情况下运行代码
index=[s.index(l)表示字母中的l]
然后返回一个错误
'ValueError:未找到子字符串'
下面是我用来稳定和运行函数的内容
sol = Solution()
sol.firstUniqChar('loveleetcode')
如果
str
中不存在sub
,则str.index(sub)
将引发异常,因此如果未指定搜索条件,则s.index(l)
将运行ValueError
异常。我想你需要改变你的方式。str.index(sub)
如果sub
在str
中不存在,那么s.index(l)
将抛出异常,因此如果你没有指定搜索条件,那么s.index(l)
将运行到ValueError
异常中。我想你需要改变你的方式。你可能想用一种不同的方式重写这篇难以理解的文章,如下所示:
indexes =[ s.index(l) for l in letters if s.count(l) == 1]
变成这样(我还将难以阅读的小写字母“l”替换为“c”(如“character”):
所以,你看,如果你去掉
if s.count(c)==1
有条件,它将尝试在s
中查找所有可能的小写字母,而不仅仅是那些包含在s
中的小写字母,仅查找一次,并在未找到该字母时为您提供例外情况。您可能希望以稍微不同的方式重写难以理解的部分,这是:
indexes =[ s.index(l) for l in letters if s.count(l) == 1]
变成这样(我还将难以阅读的小写字母“l”替换为“c”(如“character”):
所以,你看,如果你去掉
if s.count(c)==1
有条件,它将尝试在s
中查找所有可能的小写字母,而不仅仅是那些包含在s
中的小写字母,仅查找一次,并在未找到该字母时给出例外情况。假设您的目标是在单个字符串中查找第一个唯一字符,则可以执行以下操作:(实际上,您不必遍历整个字母表)
这将返回字符串本身中唯一出现的第一个字符。如果您希望第一个字母字母唯一出现,您可以这样做(有一些不重复的方法,我只是喜欢,因为可能不是您想要的):
假设您的目标是在单个字符串中找到第一个唯一字符,您可以执行以下操作:(您实际上不必遍历整个字母表) 这将返回字符串本身中唯一出现的第一个字符。如果您希望第一个字母字母唯一出现,您可以这样做(有一些不重复的方法,我只是喜欢,因为可能不是您想要的):
呃,糟糕的代码..提示:当您试图在
s
中查找s
不包含的字母的索引时会发生什么情况?顺便说一句,这不是查找字符串中第一个唯一字符的最糟糕方法,但它非常接近。)@PM2Ring这是一个好问题,那么OP必须执行find并执行if语句来检查它是否是-1
@U9 Forward是的,您可以使用.find
而不是.index
来避免引发异常。或者您可以捕获异常。但是对于此任务,没有必要这样做。相反,您可以使用更高效的算法thm不测试甚至不在字符串中的字母。一旦找到第一个唯一字符,您就会停止。当然,实际任务可能是找到第一个唯一小写ASCII字母的索引;OP应该澄清这一点。啊,糟糕的代码..提示:当您尝试在字母的s
中查找索引时会发生什么s
不包含?顺便说一句,这不是找到字符串中第一个唯一字符的最糟糕方法,但它非常接近。)@PM2Ring这是一个好问题,那么OP必须执行find并执行if语句来检查它是否是-1
@U9 Forward是的,您可以使用.find
而不是.index
来避免引发异常。或者您可以捕获异常。但是对于此任务,没有必要这样做。相反,您可以使用更高效的算法thm不测试甚至不在字符串中的字母。一旦找到第一个唯一字符,您就会停止。当然,实际任务可能是找到第一个唯一小写ASCII字母的索引;OP应该澄清这一点。您应该返回索引,而不是参考字母表或字符串的字符本身本身?s.index(l)
看起来不像是一个参考字母表,用来询问OP在我给出的示例中是否需要索引't'或'a',因为我认为有区别,但实际上是s.find(min(counter,key=counter.get))双向工作。干杯。你应该返回一个索引,而不是参考字母表本身的字符或字符串本身?s.index(l)
看起来不像是一个参考字母表,用于询问OP在我给出的示例中是否需要索引't'或'a',因为我认为有区别,但实际上是s.find(min(counter,key=counter.get))是双向的。干杯。
class Solution:
def firstUniqChar(self, s):
"""
:type s: str
"""
assert isinstance(s,str), "Please insert a valid string"
s=s.lower()
counter = {}
for key in s:
counts = s.count(key)
if counts == 1 and key.isAlpha():
counter[key] = counts
return min(counter, key=counter.get) if len(counter) > 0 else -1
sol = Solution()
print(sol.firstUniqChar('toobad'))
>t
class Solution:
def firstUniqChar(self, s):
"""
:type s: str
"""
assert isinstance(s,str), "Please insert a valid string"
s=s.lower()
counter = {}
for key in 'abc......':
counts = s.count(key)
if counts == 1:
counter[key] = counts
return min(counter, key=counter.get) if len(counter) > 0 else -1
sol = Solution()
print(sol.firstUniqChar('toobad'))
>a