Format string with all elements of a list

前端 未结 3 405
南旧
南旧 2021-01-23 02:50
words = [\'John\', \'nice\', \'skateboarding\']
statement = \"%s you are so %s at %s\" % w for w in words

produces

File \"

        
相关标签:
3条回答
  • 2021-01-23 03:05

    Two things are wrong:

    • You cannot create a generator expression without parenthesis around it. Simply putting w for w in words is invalid syntax for python.

    • The % string formatting operator requires a tuple, a mapping or a single value (that is not a tuple or a mapping) as input. A generator is not a tuple, it would be seen as a single value. Even worse, the generator expression would not be iterated over:

      >>> '%s' % (w for w in words)
      '<generator object <genexpr> at 0x108a08730>'
      

    So the following would work:

    statement = "%s you are so %s at %s" % tuple(w for w in words)
    

    Note that your generator expression doesn't actually transform the words or make a selection from the words list, so it is redundant here. So the simplest thing is to just cast the list to a tuple instead:

    statement = "%s you are so %s at %s" % tuple(words)
    
    0 讨论(0)
  • 2021-01-23 03:10

    You could also use the new .format style string formatting with the "splat" operator:

    >>> words = ['John', 'nice', 'skateboarding']
    >>> statement = "{0} you are so {1} at {2}".format(*words)
    >>> print (statement)
    John you are so nice at skateboarding
    

    This works even if you pass a generator:

    >>> statement = "{0} you are so {1} at {2}".format(*(x for x in words))
    >>> print (statement)
    John you are so nice at skateboarding
    

    Although, in this case there is no need to pass a generator when you can pass words directly.

    One final form which I think is pretty nifty is:

    >>> statement = "{0[0]} you are so {0[1]} at {0[2]}".format(words)
    >>> print statement
    John you are so nice at skateboarding
    
    0 讨论(0)
  • 2021-01-23 03:17
    >>> statement = "%s you are so %s at %s" % tuple(words)
    'John you are so nice at skateboarding'
    
    0 讨论(0)
提交回复
热议问题