Bit stuck on a coding challenge here, I'm writing a function that takes two arguments (strings. queries) and prints the number of times each query string occurs in the input string. I think I'm quite close to figuring this out but my function is currently insensitive to query strings with spaces before/after a query string.
Version 1 (insensitive to query strings containing spaces):
strings = ['ab', ' ab', 'abc']
queries = ['ab', ' abc', ' bc']
def matchingStrings(strings, queries):
for i in range(len(queries)):]
n_matches = strings.count(queries[i])
print(n_matches)
matchingStrings(strings,queries)
Current Output:
1
0
0
Version 2 (attempt to retain quotation marks):
def matchingStrings(strings, queries):
for i in range(len(queries)):
query_to_match = '\'%s\'' % queries[i]
n_matches = strings.count(query_to_match)
print(n_matches)
matchingStrings(strings,queries)
Current Output:
0
0
0
Expected Output:
2
1
0
This will work by using regex, albeit slower as it iterates through two lists:
def matching_strings(strings, queries):
for query in queries:
count = 0
for string in strings:
if re.match(query.strip(), string):
count += 1
print(count)
Running the function on your input will provide the desired output! This works by checking if there is a match on the query string (without whitespace with .strip()
).
Here is my output:
>>> strings = ['ab', ' ab', 'abc']
>>> queries = ['ab', ' abc', ' bc']
>>> matching_strings(strings, queries)
2
1
0
So this solution is close to the right answer, but there are a few things going on. First, to compare all of the queries with all of the strings, we will need two for loops. Here is the pseudocode to help visualize what is going on:
Here is the python if you would like to see it.
strings = ['ab', ' ab', 'abc']
queries = ['ab', ' abc', ' bc']
def matchingStrings(strings, queries):
for query in queries:
count = 0
# need to iterate through ALL strings.
for string in strings:
if query.strip() == string.strip():
count += 1
print(count)
matchingStrings(strings, queries)
With the output:
2
1
0
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.