Python 3:返回列表列表中最长的项目

时间:2017-01-05 15:21:56

标签: python python-3.x lambda

如果我有这些数据:

a = [['a', 'b', 'b', 'v', 'd'], 
     ['d', 'f', 'g'], ['q', 'w', 'e', 'r', 't', 'y'], 
     ['x', '123', 'v', 'b'], ['g', 'h', 'i']]

我想运行一个函数(最好是单行),它将返回123,因为它在列表列表中具有最长字符串长度。我怎么能这样做?

我唯一看到的是在列表列表中找到最长的列表,所以这是一个稍微不同的问题。

3 个答案:

答案 0 :(得分:5)

我想我会使用itertools来展平嵌套列表,然后使用内置的max

from itertools import chain

data = [['a', 'b', 'b', 'v', 'd'],
        ['d', 'f', 'g'], ['q', 'w', 'e', 'r', 't', 'y'],
        ['x', '123', 'v', 'b'], ['g', 'h', 'i']]

print(max(chain.from_iterable(data), key=len))
# '123'

更天真的方法是在每个列表中找到最长的字符串,然后找到它们之间最长的字符串:

print(max((max(li, key=len) for li in data), key=len))
# '123'

答案 1 :(得分:3)

没有任何导入,并且干净:

max((word for L in a for word in L), key=len)

答案 2 :(得分:0)

您可以采取一些方法(第一种方法与@ DeepSpace方法非常相似)。

a = [['a', 'b', 'b', 'v', 'd'], 
     ['d', 'f', 'g'], ['q', 'w', 'e', 'r', 't', 'y'], 
     ['x', '123', 'v', 'b'], ['g', 'h', 'i']]

# flatten the list
flattened = [x for y in a for x in y]
longest_elem = max(flattened, key = lambda x: len(x))

您还可以对每个字符串的长度使用numpy.argmax

# find the longest element using numpy.argmax
import numpy as np

# store the lengths of each element in `flattened`
lengths = [len(x) for x in flattened]

# find the index of the largest element in `lengths`
longest_elem_index = np.argmax(lengths)

# index `flattened` with the longest element's index from `lengths`
longest_elem = flattened[longest_elem_index]