假设我有一个列表对象,包含数字和字符串。如果我想检索具有最高字母顺序优先级的第一个字符串项,我该怎么做?
这是一个明显不正确的示例尝试,但是对于需要更改以便达到预期结果的更正将会非常感激:
lst = [12, 4, 2, 15, 3, 'ALLIGATOR', 'BEAR', 'ANTEATER', 'DOG', 'CAT']
lst.sort()
for i in lst:
if i[0] == "A":
answer = i
print(answer)
答案 0 :(得分:15)
首先使用generator expression过滤掉非字符串,然后使用min()
选择字母最高的字符串:
>>> min(x for x in lst if isinstance(x, str))
'ALLIGATOR
答案 1 :(得分:8)
IIUC您可以使用isinstance
仅使用字符串获取原始列表的子列表,然后使用sorted
按字母顺序排序获取第一个元素:
sub_lst = [i for i in lst if isinstance(i, str)]
result = sorted(sub_lst)[0]
print(sub_lst)
['ALLIGATOR', 'BEAR', 'ANTEATER', 'DOG', 'CAT']
print(result)
'ALLIGATOR'
或者您可以使用min
作为评论中建议的@ TigerhawkT3:
print(min(sub_lst))
'ALLIGATOR'
答案 2 :(得分:5)
另一种方法是使用lst
内置方法从中间人中过滤主列表filter
:
>>> min(filter(lambda s:isinstance(s, str), lst))
'ALLIGATOR'