【问题标题】:List comprehensions in pythonpython中的列表推导
【发布时间】:2012-05-04 04:53:48
【问题描述】:

有什么方法可以在 python 中使用列表推导将两个列表 a 和 b 组合成 c,

a=[1,2,3]
b=['a','b']

c=['1a','1b','2a','2b','3a','3b'] 

【问题讨论】:

标签: python list


【解决方案1】:
>>> a = [1,2,3]
>>> b = ['a', 'b']
>>> c = ['%d%c' % (x, y) for x in a for y in b]
>>> c
['1a', '1b', '2a', '2b', '3a', '3b']

【讨论】:

    【解决方案2】:
    >>> from itertools import product
    >>> a=[1,2,3]
    >>> b=['a','b']
    >>> ['%d%s' % el for el in product(a,b)]
    ['1a', '1b', '2a', '2b', '3a', '3b']
    

    使用新的字符串格式

    >>> ['{0}{1}'.format(*el) for el in product(a,b)]
    ['1a', '1b', '2a', '2b', '3a', '3b']
    

    【讨论】:

    • +1 这是一个更好的解决方案,因为产品将比嵌套循环更高效,更灵活。
    【解决方案3】:

    使用c = ["%d%s" % (x,y) for x in a for y in b]

    【讨论】:

      【解决方案4】:

      列表推导可以遍历多个对象。

      In[3]: [str(a1)+b1 for a1 in a for b1 in b]
      
      Out[3]: ['1a', '1b', '2a', '2b', '3a', '3b']
      

      注意将数字转换为字符串的细微之处。

      【讨论】:

        【解决方案5】:

        只需使用“嵌套”版本。

        c = [str(i) + j for i in a for j in b]
        

        【讨论】:

          【解决方案6】:
          import itertools
          c=[str(r)+s for r,s in itertools.product(a,b)]
          

          【讨论】:

            【解决方案7】:

            jamyak 解决方案的版本有点相似:

            >>> import itertools
            >>> a=[1,2,3]
            >>> b=['a','b']
            >>>[str(x[0])+x[1] for x in itertools.product(a,b)]
            ['1a', '1b', '2a', '2b', '3a', '3b']
            

            【讨论】:

              猜你喜欢
              • 2016-02-13
              • 2012-02-22
              • 1970-01-01
              • 2010-11-07
              • 1970-01-01
              • 1970-01-01
              • 2010-10-28
              • 2016-04-07
              • 1970-01-01
              相关资源
              最近更新 更多