首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wordList中的两个元素

wordList中的两个元素
EN

Stack Overflow用户
提问于 2019-04-03 08:24:43
回答 3查看 87关注 0票数 3

我有这样一个职能:

代码语言:javascript
复制
def ladderLength(self, beginWord, endWord, wordList):
    """
    :type beginWord: str
    :type endWord: str
    :type wordList: List[str]
    :rtype: int
    """
    if (endWord not in wordList) or (beginWord not in wordList):
        return 0

多个bool操作很麻烦。

代码语言:javascript
复制
    if (endWord not in wordList) or (beginWord not in wordList):
        return 0

怎样才能使它简明扼要呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-03 08:35:24

如果if-block所做的一切都是这样的话:

代码语言:javascript
复制
  if (endWord not in wordList) or (beginWord not in wordList):
    return 0
  else:  # <- I am assuming this, see Note 1
    return 1

然后你可以用:

代码语言:javascript
复制
return int(all(x in wordList for x in (endWord, beginWord)))

注1 没有else子句通常是非常好的,但在您的情况下,您将有一个可能返回0None的函数,这不是最佳的\推荐函数。如果可以的话,按照上面的方法重新设计它。 如果没有,我不会费心去改变条件。你所拥有的是非常可读的,没有更好的选择。你当然可以: 如果不是全部(在wordList中为x (endWord,beginWord)):返回0 但差不多就是这样了。

票数 4
EN

Stack Overflow用户

发布于 2019-04-03 08:35:06

我觉得这个应该管用。

代码语言:javascript
复制
   if any([x not in wordList for x in [endWord, beginWord]]):
        return 0
票数 0
EN

Stack Overflow用户

发布于 2019-04-03 08:42:09

如果您希望这个函数加速一点(O(log n)而不是O(n)) --考虑更改Set[str]wordList类型。在这种情况下,职能是:

代码语言:javascript
复制
def ladderLength(self, beginWord, endWord, wordList):
    """
    :type beginWord: str
    :type endWord: str
    :type wordList: Set[str]
    :rtype: int
    """
    return int(bool({beginWord, endWord} & wordList))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55490414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档