Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Tut] Python Find Shortest List in List
1
Python Find Shortest 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 shortest inner list from the outer list of lists.

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

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

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

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

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

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

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

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

So without further ado, let’s get started!

Method 1: min(lst, key=len)

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

Here’s an example:

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

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 shortest list instead.

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

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

Here’s an analogous example:

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

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

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

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

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 shortest list stored in a separate variable. After the termination of the loop, the variable contains the shortest list.

Here’s a simple example:

Code:
def get_shortest_list(lst): shortest = lst[0] if lst else None for x in lst: if len(x) < len(shortest): shortest = x return shortest print(get_shortest_list([[1], [2, 3], [4, 5, 6]])) # [1] print(get_shortest_list([[1, [2, 3], 4], [5, 6], [7]])) # [7] print(get_shortest_list([[[1], [2], [3]], [4, 5, [6]], [7, 8, 9, 10]])) # [[1], [2], [3]] print(get_shortest_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 shortest list, you could simply replace the last line of the function with
Code:
return len(shortest)
, and you’re done!

Summary

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

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

  • Method 3:
    Code:
    min(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 How to Find the Minimum of a List of Lists in Python?—it’s a slight variation!

[Image: image-93.png]

[Image: 1f449.png]Recommended Tutorial: Python Find Longest List in Dict of Lists
Reply

Users browsing this thread:
1 Guest(s)


Forum Jump: