我必须在Python中找到最长的列表列表.
例如:
longest([1,2,3]) 返回3
longest([[[1,2,3]]]) 也返回3(内部列表为3)
longest([[], [3,[4,5],[2,3,4,5,3,3], [7], 5, [1,2,3], [3,4]], [1,2,3,4,5]])返回7(列表[3,[4,5],[2,3,4,5,3,3], [7], 5, [1,2,3], [3,4]]包含7个元素)
现在我有这个代码,但它没有做前两个例子的技巧..
def longest(list1):
longest_list = max(len(elem) for elem in list1)
return longest_list
Run Code Online (Sandbox Code Playgroud)
也许递归会有所帮助?谢谢!
小智 15
这些简单的几行对我有用,我的列表是嵌套的(列表列表)
#define the function#
def find_max_list(list):
list_len = [len(i) for i in list]
print(max(list_len))
#print output#
find_max_list(your_list)
Run Code Online (Sandbox Code Playgroud)
这是任何深度列表的递归解决方案:
def longest(l):
if not isinstance(l, list):
return 0
return max(
[len(l)]
+ [len(subl) for subl in l if isinstance(subl, list)]
+ [longest(subl) for subl in l]
)
Run Code Online (Sandbox Code Playgroud)
Python 3.3版本:
def lengths(x):
if isinstance(x,list):
yield len(x)
for y in x:
yield from lengths(y)
Run Code Online (Sandbox Code Playgroud)
用法:
>>> l = [[], [3,[4,5],[2,3,4,5,3,3], [7], 5, [1,2,3], [3,4]], [1,2,3,4,5]]
>>> max(lengths(l))
7
Run Code Online (Sandbox Code Playgroud)
在python 2.6+中,您没有该yield from语句(在python 3.3中引入),因此您必须稍微更改代码:
def lengths(x):
if isinstance(x,list):
yield len(x)
for y in x:
for z in lengths(y):
yield z
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17777 次 |
| 最近记录: |