Python - Find all close matches of input string from a list
Last Updated :
03 Jan, 2025
Improve
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.
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 lists
starts with the stringa
.a.startswith(string)
: Checks if the stringa
starts with the current string from the lists
.
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.
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 firstlen(a)
characters ofstring
to check ifstring
starts witha
.
Two-Pointer Technique (Sorted)
If the list is sorted, you can use a two-pointer approach to check prefixes:
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:
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.