在带有数字的列表中查找具有字母顺序优先顺序的第一项

vs9*_*s94 9 python for-loop list python-3.x

假设我有一个列表对象,包含数字和字符串.如果我想检索具有最高字母顺序优先级的第一个字符串项,我该怎么做?

这是一个明显不正确的示例尝试,但是对于需要更改以便实现所需结果的更正将会非常感激:

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)
Run Code Online (Sandbox Code Playgroud)

Ray*_*ger 15

首先使用生成器表达式过滤掉非字符串,然后使用min()选择具有最高字母存在的字符串:

>>> min(x for x in lst if isinstance(x, str))
'ALLIGATOR
Run Code Online (Sandbox Code Playgroud)


Ant*_*pov 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'
Run Code Online (Sandbox Code Playgroud)

或者您可以min在评论中使用@ TigerhawkT3:

print(min(sub_lst))
'ALLIGATOR'
Run Code Online (Sandbox Code Playgroud)

  • 或者`min()`而不是`sorted()[0]`. (8认同)
  • 注意:实现列表(排序所必需的)需要O(N)空间,然后排序需要O((N log N)比较.另一方面,在生成器表达式上使用`min`只需要O(1)空间和O(N)比较. (3认同)

Iro*_*ist 5

另一种方法是lst使用filter内置方法从intergers 过滤主列表:

>>> min(filter(lambda s:isinstance(s, str), lst))
'ALLIGATOR'
Run Code Online (Sandbox Code Playgroud)