多列表理解

时间:2015-01-27 21:12:26

标签: python

鉴于以下数据结构,我如何获得其中字符的最大长度?

data = [['a', 'b'], ['cc', 'dd']]

最大的项目是' cc'所以答案是2.这是我到目前为止所做的,但这是不正确的。

max_chars = [len(item) for item for item in data]

3 个答案:

答案 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