Search code examples
pythonpython-3.xcountbooleanends-with

TypeError: endswith first arg must be str or a tuple of str, not bool


I was trying to count the occurrences of words which end with several suffixes. I thought that endswith would accept an iterable; unfortunately, it did not. Below is the code snippet:

s = 'like go goes likes liked liked liking likes like'
lst = s.split()
suffixes = ['s', 'es', 'ies', 'ed', 'ing']

counter = 0
prompt = 'like'
for x in lst:
    if x.startswith(prompt) and x.endswith(any(suffix for suffix in suffixes)):
         counter += 1

The value of counter should be 4 at the end of the execution. This is the error message which is displayed:

TypeError: endswith first arg must be str or a tuple of str, not bool

How can I get the above code to work?


Solution

  • The any function returns a bool value, but str.startswith requires a string or a tuple of strings.

    You can just convert your list to a tuple and pass it to startswith:

    x.endswith(tuple(suffixes))