Search code examples
pythonoptional-arguments

looping over optional arguments (strings) in python


I have lists of strings, some are hashtags - like #rabbitsarecool others are short pieces of prose like "My rabbits name is fred."

I have written a program to seperate them:

def seperate_hashtags_from_prose(*strs):
    props    = []
    hashtags = []
    for x in strs:
        if x[0]=="#" and x.find(' ')==-1:
            hashtags += x
        else:
            prose    += x
    return hashtags, prose

seperate_hashtags_from_prose(["I like cats","#cats","Rabbits are the best","#Rabbits"])

This program does not work. in the above example when i debug it, it tells me that on the first loop:

x=["I like cats","#cats","Rabbits are the best",#Rabbits].

Thisis not what I would have expected - my intuition is that something about the way the loop over optional arguments is constructed is causing an error- but i can't see why.


Solution

  • There are several issues.

    1. The most obvious is switching between props and prose. The code you posted does not run.
    2. As others have commented, if you use the * in the function call, you should not make the call with a list. You could use seperate_hashtags_from_prose("I like cats","#cats","Rabbits are the best","#Rabbits") instead.
    3. The line hashtags += x does not do what you think it does. When you use + as an operator on iterables (such as list and string) it will concatenate them. You probably meant hashtags.append(x) instead.