哪个角色第一?

时间:2017-06-16 09:12:07

标签: string python-3.x

因此输入为word,我想知道ab是否优先。

我可以使用a_index = word.find('a')并将其与b_index = word.find('b')进行比较,如果a是第一个,则返回a is first。但如果b不在word.find()将返回-1,那么只需比较b_index < a_index就会返回b is first。这可以通过添加更多if语句来实现,但是有更简洁的方法吗?

功能描述:
输入:word[list of characters]
输出:the character in the list that appears first in the word

示例:first_instance("butterfly", ['a', 'u', 'e']返回u

3 个答案:

答案 0 :(得分:1)

你可以创建一个带wordchars列表的函数 - 将这些字符转换成一组用于快速查找和循环word取得找到的第一个字母,例如:

# Chars can be any iterable whose elements are characters
def first_of(word, chars):
    # Remove duplicates and get O(1) lookup time
    lookup = set(chars)
    # Use optional default argument to next to return `None` if no matches found
    return next((ch for ch in word if ch in lookup), None)

示例:

>>> first_of('bob', 'a')
>>> first_of('bob', 'b')
'b'
>>> first_of('abob', 'ab')
'a'
>>> first_of("butterfly", ['a', 'u', 'e'])
'u'

这样你只需迭代word一次并在找到的第一个字母上短路而不是运行多个查找,存储结果然后计算最低索引。

答案 1 :(得分:1)

制作一个没有丢失字符的列表,然后按位置排序。

def first_found(word, chars):
  places = [x for x in ((word.find(c), c) for c in chars) if x[0] != -1]
  if not places:
    # no char was found
    return None
  else:
    return min(places)[1]

答案 2 :(得分:0)

在任何情况下,您都需要检查输入的类型:

if isinstance(your_input, str):
   a_index = your_input.find('a')
   b_index = your_input.find('b')
   # Compare the a and b indexes

elif isinstance(your_input, list):

   a_index = your_input.index('a')
   b_index = your_input.index('b') 
   # Compare the a and b indexes
else:

   # Do something else

编辑:

def first_instance(word, lst):
    indexes = {}
    for c in lst:
        if c not in indexes:
            indexes[c] = word.find(c)
        else:
            pass

    return min(indexes, key=indexes.get)

它将返回列表lst中的字符,该字符位于单词的第一位。

如果您需要返回此字母的索引,请将return语句替换为:

return min_value = indexes[min(indexes, key=indexes.get)]