I have a list that has names and I want to get the list element which has some part of my string
for example:
names = ["David Benj Jacob", "Alex"]
so if I search with "David Jacob" then how can I get the first element of the list "David Benj Jacob"?
I tried if "David Jacob" in names
CodePudding user response:
You need to check if all parts of the substring are in any of the names
names = ["David Benj Jacob", "Alex"]
substr = "David Jacob"
valid_names = []
for name in names:
if all(part in name for part in substr.split()):
valid_names.append(name)
CodePudding user response:
Try splitting the querying string to substrings and check if that substring is present in items from an names
array.
names = ["David Benj Jacob", "Alex"]
def search(names: list[str], query: str) -> str:
# Split words
split = query.split(" ")
# Iterate over all names
for item in names:
# Iterate over all words from 'query'
for word in split:
# Check if word is present
if word in item:
return item
queried = search(names, "David Jacob")
CodePudding user response:
I've come to a similar conclusion as @jprebys, but I've written a basic function that returns the index of the match in the names
list given a search string.
names = ["David Benj Jacob", "Alex"]
def find_name(search: str) -> int:
for name in names:
if all(n in name for n in search.split()):
return names.index(name)
CodePudding user response:
names = ['David benj Jacob', 'John Legend']
wanted_name = "David Jacob"
first_name, last_name = wanted_name.split(' ')
for name in names:
if first_name in names or last_name in names:
print(name)
or using regex
and filter
functions in python.
like the what the answer suggested provided here: Regular Expressions: Search in list
which would be something like:
names = ['David benj Jacob', 'John Legend']
wanted_name = "David Jacob"
first_name, last_name = wanted_name.split(' ')
pat = re.compile(fr"{first_name}.*?{last_name}")
wanted_names = list(filter(pat.match,names))