5 Best Ways to Check if a List in Python Contains Particular Digits

πŸ’‘ Problem Formulation: In Python, verifying if a list of numbers contains certain digits is a common task that developers encounter. For example, given a list [23, 35, 78, 56, 12], we may want to check if any number in the list contains the digit 3. This article explores various methods to perform this check efficiently.

Method 1: Using a Loop and ‘in’ Operator

This method involves iterating each element in the list and checking if the digit as a string is present within the string representation of the element. It’s a straightforward approach that works well with small lists.

Here’s an example:

my_list = [23, 35, 78, 56, 12]
digit_to_check = '3'

found = any(str(digit_to_check) in str(num) for num in my_list)
print(found)

Output: True

This code snippet initializes a list of numbers and a digit to check for. It then uses the built-in any() function to iterate through the list and checks if the digit (converted to a string) is a substring of each number (also converted to a string). If the digit is found in any of the numbers, found becomes True.

Method 2: Using List Comprehension and ‘if’

List comprehension provides a compact syntax for filtering elements. In this method, we create a list of booleans indicating whether the digit is found in each element, and then check if True is in this new list.

Here’s an example:

my_list = [23, 35, 78, 56, 12]
digit_to_check = '3'

matches = [str(digit_to_check) in str(num) for num in my_list]
found = True in matches
print(found)

Output: True

The code snippet offered above uses list comprehension to generate a list of boolean values where each boolean corresponds to whether the digit appears in the number. It then checks if True is in the generated list to determine if the digit was found.

Method 3: Using Regular Expressions

Regular expressions offer a powerful way to search for patterns in strings. By converting the numbers into strings, we can use a regular expression to check for the presence of a particular digit.

Here’s an example:

import re

my_list = [23, 35, 78, 56, 12]
digit_to_check = '3'

pattern = re.compile(str(digit_to_check))
found = any(pattern.search(str(num)) is not None for num in my_list)
print(found)

Output: True

This code snippet imports the re module to utilize regular expressions. A pattern is compiled for the digit we are looking for, and then the search method from re is used within a generator expression to identify if any list element contains this digit.

Method 4: Using Filter and Map Functions

By combining the filter and map functions, we can filter out the elements that do not contain the digit and then check if the resulting filtered list is not empty, which would mean that at least one element contains the digit.

Here’s an example:

my_list = [23, 35, 78, 56, 12]
digit_to_check = '3'

contains_digit = lambda num: str(digit_to_check) in str(num)
found = bool(list(filter(contains_digit, my_list)))
print(found)

Output: True

In this example, a lambda function is defined to check if the digit is in the number, and the filter function is used to apply this lambda to each element of the list. The bool function is used to convert the resulting list into a boolean value which indicates if any elements passed the filter.

Bonus One-Liner Method 5: Using Set Operations

For a direct and concise approach, one can use set operations. The idea is to convert elements of the list and the digit to sets of characters and use set intersection to determine if the digit is present.

Here’s an example:

my_list = [23, 35, 78, 56, 12]
digit_to_check = {'3'}

found = any(digit_to_check <= set(str(num)) for num in my_list)
print(found)

Output: True

This code snippet uses a set containing the character ‘3’ and then goes through the list, checking if this set is a subset of each number’s character set. If the set defined by the digit ‘3’ is a subset of at least one element in the list, found will be True.

Summary/Discussion

  • Method 1: Loop and ‘in’ Operator. This method is simple and easy to understand. Its simplicity can be a strength, but it might not be the most efficient for large datasets.
  • Method 2: List Comprehension and ‘if’. This approach is concise and Pythonic, and it can be more efficient due to list comprehension optimization. However, it creates an intermediate list, which may not be memory efficient for very large lists.
  • Method 3: Regular Expressions. Regex is highly flexible and can be more powerful for complex patterns. The downside is that regex parsing can be slower compared to other methods, and regex syntax can be seen as less readable for those unfamiliar with it.
  • Method 4: Filter and Map Functions. This functional programming approach is clean and can be easy to read. However, like the list comprehension, it may not be efficient in terms of memory usage for very large lists.
  • Method 5: Using Set Operations. It’s a very concise one-liner, but the concept of set operations might be less intuitive for beginners. Good for small to medium-sized lists, but can have overhead when casting each number to a string and then to a set.