鉴于以下数据结构,我如何获得其中字符的最大长度?
data = [['a', 'b'], ['cc', 'dd']]
最大的项目是' cc'所以答案是2.这是我到目前为止所做的,但这是不正确的。
max_chars = [len(item) for item for item in data]
答案 0 :(得分:3)
这应该这样做
max_chars = max(len(item) for lst in data for item in lst)
答案 1 :(得分:1)
我不喜欢嵌套列表推导。他们很难阅读。
使用itertools,您可以展平数据,然后找到最大长度。
import itertools
flat = itertools.chain(*data)
result = max(len(i) for i in flat)
请注意,flat
是一个难以检查的可迭代对象,但list(flat)
会返回['a', 'b', 'cc', 'dd']
答案 2 :(得分:0)
Max采用key
函数:
>>> max([['a', 'b'], ['cc', 'dd']], key=lambda l: max(len(e) for e in l))
['cc', 'dd']
>>> max([['a', 'bbb'], ['cc', 'dd']], key=lambda l: max(len(e) for e in l))
['a', 'bbb']
打印具有最长元素的子列表。如果您想要长度的值和单个子列表的索引,您可以这样做:
>>> data=[['a', 'bbb'], ['cc', 'dd']]
>>> maxes=((i, len(max(l, key=len))) for i, l in enumerate(data))
>>> max(maxes, key=lambda t:t[1])
(0, 3) # first element is the sublist index, second the length