如何找到Python列表中最短的字符串?

1,314 阅读2分钟

使用 Python 内置的min() 函数,带一个关键参数来查找列表中最短的字符串。调用min(lst, key=len) 来返回lst 中最短的字符串,使用内置的len() 函数来关联每个字符串的权重-最短的字符串将是最大的。

How to Find the Longest String in a Python List?

问题的提出

给出一个Python的字符串列表 。找到字符数最少的字符串--列表中最短的字符串。

下面是几个字符串列表的例子和所需的输出。

# ['Alice', 'Bob', 'Pete']   – -->   'Bob'
# ['aaa', 'aaaa', 'aa']      – -->   'aa'
# ['']                       – -->   ''
# []                         – -->   ''

解决方案:min()函数,关键函数参数len()

使用Python的内置 [min()](https://blog.finxter.com/python-min/)函数和一个关键参数来查找列表中最短的字符串。调用min(lst, key=len) 来返回lst 中最短的字符串,使用内置的[len()](https://blog.finxter.com/python-len/)函数来关联每个字符串的权重--最短的字符串将是最小的。

下面是get_min_str() 函数的代码定义,它接收一个字符串列表作为输入,并返回列表中最短的字符串,如果列表为空,则返回ValueError

def get_min_str(lst):
    return min(lst, key=len)

下面是我们想要的例子的输出。

print(get_min_str(['Alice', 'Bob', 'Pete']))
# 'Bob'

print(get_min_str(['aaa', 'aaaa', 'aa']))
# 'aa'

print(get_min_str(['']))
# ''

print(get_min_str([]))
# ValueError

边界案例:如果列表是空的怎么办?

如果你想在列表为空的情况下返回另一个值,你可以修改get_min_str() 函数以包括第二个可选参数。

def get_min_str(lst, fallback=''):
    return min(lst, key=len) if lst else fallback


print(get_min_str([]))
# ''

print(get_min_str([], fallback='NOOOOOOOOO!!!!!!'))
# NOOOOOOOOO!!!!!!

使用For Loop的解决方案

一个不太像Pythonic但对初学者来说更易读的版本是下面这个基于循环的

def get_min_str(lst, fallback=''):
    if not lst:
        return fallback

    min_str = lst[0]   # list is not empty

    for x in lst:
        if len(x) < len(min_str):
            min_str = x

    return min_str


print(get_min_str(['Alice', 'Bob', 'Pete']))
# 'Bob'

print(get_min_str(['aaa', 'aaaa', 'aa']))
# 'aa'

print(get_min_str(['']))
# ''

print(get_min_str([], fallback='NOOOOOOOOO!!!!!!'))
# NOOOOOOOOO!!!!!!

Python 列表中字符串的最小长度

要找到一个给定列表中字符串的最小长度,可以使用min(lst, key=len) 函数来获得具有最小长度的字符串,然后将这个最小字符串传入len() 函数,以获得最小字符串的字符数。

len(min(lst, key=len))

这里有一个更详细的例子。

def get_min_length(lst):
    return len(min(lst, key=len))


print(get_min_length(['Alice', 'Bob', 'Pete']))
# 3

print(get_min_length(['aaa', 'aaaa', 'aa']))
# 2

print(get_min_length(['']))
# 0

print(get_min_length([]))
# Value Error!!!