如果我有这些数据:
a = [['a', 'b', 'b', 'v', 'd'],
['d', 'f', 'g'], ['q', 'w', 'e', 'r', 't', 'y'],
['x', '123', 'v', 'b'], ['g', 'h', 'i']]
我想运行一个函数(最好是单行),它将返回123
,因为它在列表列表中具有最长字符串长度。我怎么能这样做?
我唯一看到的是在列表列表中找到最长的列表,所以这是一个稍微不同的问题。
答案 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]