Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Tut] Python Find Longest List in List
1
Python Find Longest List in List

5/5 – (1 vote)

Problem Formulation

[Image: 1f4ac.png] Programming Challenge: Given a list of lists (nested list). Find and return the longest inner list from the outer list of lists.

Here are some examples:
  • Code:
    [[1], [2, 3], [4, 5, 6]]
    [Image: 1f449.png]
    Code:
    [4, 5, 6]

  • Code:
    [[1, [2, 3], 4], [5, 6], [7]]
    [Image: 1f449.png]
    Code:
    [1, [2, 3], 4]

  • Code:
    [[[1], [2], [3]], [4, 5, [6]], [7, 8, 9, 10]]
    [Image: 1f449.png]
    Code:
    [7, 8, 9, 10]

Also, you’ll learn how to solve a variant of this challenge.

[Image: 1f4ac.png] Bonus challenge: Find only the length of the longest list in the list of lists.

Here are some examples:
  • Code:
    [[1], [2, 3], [4, 5, 6]]
    [Image: 1f449.png]
    Code:
    3

  • Code:
    [[1, [2, 3], 4], [5, 6], [7]]
    [Image: 1f449.png]
    Code:
    3

  • Code:
    [[[1], [2], [3]], [4, 5, [6]], [7, 8, 9, 10]]
    [Image: 1f449.png]
    Code:
    4

So without further ado, let’s get started!

Method 1: max(lst, key=len)

Use Python’s built-in
Code:
max()
function with a key argument to find the longest list in a list of lists. Call
Code:
max(lst, key=len)
to return the longest list in
Code:
lst
using the built-in
Code:
len()
function to associate the weight of each list, so that the longest inner list will be the maximum.

Here’s an example:

Code:
def get_longest_list(lst): return max(lst, key=len) print(get_longest_list([[1], [2, 3], [4, 5, 6]])) # [4, 5, 6] print(get_longest_list([[1, [2, 3], 4], [5, 6], [7]])) # [1, [2, 3], 4] print(get_longest_list([[[1], [2], [3]], [4, 5, [6]], [7, 8, 9, 10]])) # [7, 8, 9, 10]

A beautiful one-liner solution, isn’t it? [Image: 1f642.png] Let’s have a look at a slight variant to check the length of the longest list instead.

Method 2: len(max(lst, key=len))

To get the length of the longest list in a nested list, use the
Code:
len(max(lst, key=len))
function. First, you determine the longest inner list using the
Code:
max()
function with the key argument set to the
Code:
len()
function. Second, you pass this longest list into the
Code:
len()
function itself to determine the maximum.

Here’s an analogous example:

Code:
def get_length_of_longest_list(lst): return len(max(lst, key=len)) print(get_length_of_longest_list([[1], [2, 3], [4, 5, 6]])) # 3 print(get_length_of_longest_list([[1, [2, 3], 4], [5, 6], [7]])) # 3 print(get_length_of_longest_list([[[1], [2], [3]], [4, 5, [6]], [7, 8, 9, 10]])) # 4
Method 3: max(len(x) for x in lst)

A Pythonic way to check the length of the longest list is to combine a generator expression or list comprehension with the
Code:
max()
function without key. For instance,
Code:
max(len(x) for x in lst)
first turns all inner list into length integer numbers and passes this iterable into the
Code:
max()
function to get the result.

Here’s this approach on the same examples as before:

Code:
def get_length_of_longest_list(lst): return max(len(x) for x in lst) print(get_length_of_longest_list([[1], [2, 3], [4, 5, 6]])) # 3 print(get_length_of_longest_list([[1, [2, 3], 4], [5, 6], [7]])) # 3 print(get_length_of_longest_list([[[1], [2], [3]], [4, 5, [6]], [7, 8, 9, 10]])) # 4

A good training effect can be obtained by studying the following tutorial on the topic—feel free to do so!

[Image: 1f449.png] Training: Understanding List Comprehension in Python

Method 4: Naive For Loop

A not so Pythonic but still fine approach is to iterate over all lists in a
Code:
for
loop, check their length using the
Code:
len()
function, and compare it against the currently longest list stored in a separate variable. After the termination of the loop, the variable contains the longest list.

Here’s a simple example:

Code:
def get_longest_list(lst): longest = lst[0] if lst else None for x in lst: if len(x) > len(longest): longest = x return longest print(get_longest_list([[1], [2, 3], [4, 5, 6]])) # [4, 5, 6] print(get_longest_list([[1, [2, 3], 4], [5, 6], [7]])) # [1, [2, 3], 4] print(get_longest_list([[[1], [2], [3]], [4, 5, [6]], [7, 8, 9, 10]])) # [7, 8, 9, 10] print(get_longest_list([])) # None

So many lines of code! [Image: 1f605.png] At least does the approach also work when passing in an empty list due to the ternary operator used in the first line.

Code:
lst[0] if lst else None

If you need a refresher on the ternary operator, you should check out our blog tutorial.

[Image: 1f449.png] Training Tutorial: The Ternary Operator — A Powerful Python Device

[Image: 2b50.png] Note: If you need the length of the longest list, you could simply replace the last line of the function with
Code:
return len(longest)
, and you’re done!

Summary

You have learned about four ways to find the longest list and its length from a Python list of lists (nested list):
  • Method 1:
    Code:
    max(lst, key=len)

  • Method 2:
    Code:
    len(max(lst, key=len))

  • Method 3:
    Code:
    max(len(x) for x in lst)

  • Method 4: Naive For Loop

I hope you found the tutorial helpful, if you did, feel free to consider joining our community of likeminded coders—we do have lots of free training material!

[Image: 1f449.png] Also, check out our tutorial on finding the general maximum of a list of lists—it’s a slight variation!

[Image: image-89.png]
[Image: lyteCache.php?origThumbUrl=https%3A%2F%2...efault.jpg]
Reply

Users browsing this thread:
1 Guest(s)


Forum Jump: