【问题标题】:Multiplying strings in a list by numbers from another list, element by element将列表中的字符串乘以另一个列表中的数字,逐个元素
【发布时间】:2020-05-23 17:52:33
【问题描述】:

我有两个列表,['A', 'B', 'C', 'D'][1, 2, 3, 4]。两个列表将始终具有相同数量的项目。我需要将每个字符串乘以它的数字,所以我要寻找的最终产品是:

['A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D']

【问题讨论】:

标签: python list


【解决方案1】:

嵌套列表理解也有效:

>>> l1 = ['A', 'B', 'C', 'D'] 
>>> l2 = [1, 2, 3, 4]
>>> [c for c, i in zip(l1, l2) for _ in range(i)]
['A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D']

在上面的zip 返回(char, count) 元组:

>>> t = list(zip(l1, l2))
>>> t
[('A', 1), ('B', 2), ('C', 3), ('D', 4)]

然后对每个元组执行第二个for 循环count 次以将字符添加到结果中:

>>> [char for char, count in t for _ in range(count)]
['A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D']

【讨论】:

    【解决方案2】:

    我会使用itertools.repeat 来实现一个不错、高效的实现:

    >>> letters = ['A', 'B', 'C', 'D']
    >>> numbers = [1, 2, 3, 4]
    >>> import itertools
    >>> result = []
    >>> for letter, number in zip(letters, numbers):
    ...     result.extend(itertools.repeat(letter, number))
    ...
    >>> result
    ['A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D']
    >>>
    

    我也觉得它的可读性很好。

    【讨论】:

      【解决方案3】:

      代码非常简单,见内联 cmets

      l1 = ['A', 'B', 'C', 'D'] 
      l2 = [1, 2, 3, 4]
      res = []
      for i, x in enumerate(l1): # by enumerating you get both the item and its index
          res += x * l2[i] # add the next item to the result list
      print res
      

      输出

      ['A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D']
      

      【讨论】:

        【解决方案4】:

        您使用zip() 这样做:

        a = ['A', 'B', 'C', 'D']
        b = [1, 2, 3, 4]
        
        final = []
        for k,v in zip(a,b):
            final += [k for _ in range(v)]
        
        print(final)
        

        输出:

        >>> ['A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D']
        

        或者你也可以这样做,使用zip()list comprehension

        a = ['A', 'B', 'C', 'D']
        b = [1, 2, 3, 4]
        final = [k for k,v in zip(a,b) for _ in range(v)]
        print(final)
        

        输出:

        >>> ['A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D']
        

        【讨论】:

          猜你喜欢
          • 2016-05-23
          • 2016-05-12
          • 1970-01-01
          • 1970-01-01
          • 2019-08-03
          • 2012-09-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多