Python string.join(list) on object array rather than string array

前端 未结 4 554
无人及你
无人及你 2020-11-30 18:17

In Python, I can do:

>>> list = [\'a\', \'b\', \'c\']
>>> \', \'.join(list)
\'a, b, c\'

Is there any easy way to do the s

相关标签:
4条回答
  • 2020-11-30 18:35

    another solution is to override the join operator of the str class.

    Let us define a new class my_string as follows

    class my_string(str):
        def join(self, l):
            l_tmp = [str(x) for x in l]
            return super(my_string, self).join(l_tmp)
    

    Then you can do

    class Obj:
        def __str__(self):
            return 'name'
    
    list = [Obj(), Obj(), Obj()]
    comma = my_string(',')
    
    print comma.join(list)
    

    and you get

    name,name,name
    

    BTW, by using list as variable name you are redefining the list class (keyword) ! Preferably use another identifier name.

    Hope you'll find my answer useful.

    0 讨论(0)
  • 2020-11-30 18:47

    You could use a list comprehension or a generator expression instead:

    ', '.join([str(x) for x in list])  # list comprehension
    ', '.join(str(x) for x in list)    # generator expression
    
    0 讨论(0)
  • 2020-11-30 18:47

    I know this is a super old post, but I think what is missed is overriding __repr__, so that __repr__ = __str__, which is the accepted answer of this question marked duplicate.

    0 讨论(0)
  • 2020-11-30 18:52

    The built-in string constructor will automatically call obj.__str__:

    ''.join(map(str,list))
    
    0 讨论(0)
提交回复
热议问题