Open In App

Python – Find all close matches of input string from a list

Last Updated : 03 Jan, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

In Python, there are multiple ways to find all close matches of a given input string from a list of strings.

Using startswith()

startswith() function is used to identify close matches for the input string. It checks if either the strings in the list start with the input or if the input starts with them.

Python
s = ["Lion", "Li", "Tiger", "Tig"]
a = "Lion"

# Iterate through each string in the list
for string in s:
    if string.startswith(a) or a.startswith(string):
        print(string, end=" ")

Output
Lion Li 

Explanation:

  • string.startswith(a): Checks if the current string from the list s starts with the string a.
  • a.startswith(string): Checks if the string a starts with the current string from the list s.

Let’s understand various other methods to Find all close matches of input string from a list.

Using String Slicing

Substring comparison can be used to identify matches. By checking if one string is a prefix of another, close matches can be determined.

Python
s = ["Lion", "Li", "Tiger", "Tig"]
a = "Lion"

#Iterate through each string in a list
for string in s:
    if string[:len(a)] == a or a[:len(string)] == string:
        print(string, end=" ")

Output
Lion Li 

Explanation:

  • string[:len(a)] == a: Extracts the first len(a) characters of string to check if string starts with a.

Two-Pointer Technique (Sorted)

If the list is sorted, you can use a two-pointer approach to check prefixes:

Python
s = ["Lion", "Li", "Tiger", "Tig"]
a = "Lion"

#Sort the list of strings to process in order
s.sort()

 # Initialize two pointers: `i` starts at the beginning, 
  #`j` at the end of the list
i, j = 0, len(s) - 1

#Initialize ana empty list
result = []

#Use a while loop to iterate through the list 
while i <= j:
    if s[i].startswith(a) or a.startswith(s[i]):
        result.append(s[i])
    i += 1

print(" ".join(result))

Output
Li Lion

Explanation:

  • s.sort(): Sorts the list lexicographically (alphabetical order).
  • s[i].startswith(a) or a.startswith(s[i]): Checks if the current string (s[i]) starts with the reference string a.

Using Regular Expressions

Regular expressions allow you to match patterns efficiently:

Python
import re

s = ["Lion", "Li", "Tiger", "Tig"]
a = "Lion"

# Create a regex pattern that checks if a string starts with `a` 
# or if it starts with any string in `s`
regex = f"^{re.escape(a)}|^{re.escape('|'.join(s))}"

# - `re.escape(a)` escapes special characters in `a` 
# (if any) to avoid regex errors.
# - `re.escape('|'.join(s))` joins all strings in 
matches = [string for string in s if re.match(regex, string) or re.match(regex, a)]
print(" ".join(matches))

Output
Lion Li Tiger Tig

Explanation :

  • ^{re.escape(‘|’.join(s))}: Matches strings starting with any string in s, combined using the | (OR) operator.
  • Filters the strings in s by checking if either the string itself or the reference string a matches the regex.


Next Article
Practice Tags :

Similar Reads