因此输入为word
,我想知道a
或b
是否优先。
我可以使用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
答案 0 :(得分:1)
你可以创建一个带word
和chars
列表的函数 - 将这些字符转换成一组用于快速查找和循环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)]