Search code examples
pythonstringstring-concatenation

What better way to concatenate string in python?


Understand "better" as a quicker, elegant and readable.

I have two strings (a and b) that could be null or not. And I want concatenate them separated by a hyphen only if both are not null:

a - b

a (if b is null)

b (where a is null)


Solution

  • # Concatenates a and b with ' - ' or Coalesces them if one is None
    '-'.join([x for x in (a,b) if x])
    

    Edit
    Here are the results of this algorithm (Note that None will work the same as ''):

    >>> '-'.join([x for x in ('foo','bar') if x])
    'foo-bar'
    >>> '-'.join([x for x in ('foo','') if x])
    'foo'
    >>> '-'.join([x for x in ('','bar') if x])
    'bar'
    >>> '-'.join([x for x in ('','') if x])
    ''
    

    *Also note that Rafael's assessment, in his post below, only showed a difference of .0002 secs over a 1000 iterations of the filter method, it can be reasoned that such a small difference can be due to inconsistencies in available system resources at the time of running the script. I ran his timeit implementation over several iteration and found that either algorithm will be faster about 50% of the time, neither by a wide margin. Thus showing they are basically equivalent.