如何在每种可能的组合中将一个列表与另一个列表相乘?

时间:2016-11-18 20:04:17

标签: python python-3.x iteration

例如:

list1 = [1, 2, 3]
list2 = [4, 5, 6]

通缉结果:

NewList = [4, 5, 6, 8, 10, 12, 12, 15, 18]

2 个答案:

答案 0 :(得分:3)

三种可能的方法:

  1. <强>可读

    new_list = []
    for a in list1:
        for b in list2:
            new_list.append(a * b)
    

    这清楚地表明发生了什么,但需要四行并重复调用new_list.append(),效率稍低。

  2. <强>简明

    new_list = [a * b for a in list1 for b in list2]
    

    这非常紧凑,但对于很多人来说,需要花一两个时间来记住多个for list comprehensions的嵌套是从左到右还是从右到左。< / p>

  3. <强>懒惰

    from itertools import product
    
    new_list = [a * b for a, b in product(list1, list2)]
    

    即使list1list2generators或其他一次性,懒惰评估的迭代,这也可正常工作,例如

    >>> from itertools import count, islice
    >>> list1 = islice(count(1), 3)
    >>> list2 = islice(count(4), 3)
    >>> [a * b for a, b in product(list1, list2)]
    [4, 5, 6, 8, 10, 12, 12, 15, 18]
    

    ......这对前两种方法无效。

  4. 请注意,我在这些示例中使用了new_list而不是NewList,这是在Python中命名变量的传统方法。

答案 1 :(得分:0)

您可以通过打印NewList来检查结果,在这种情况下可以为您提供上面的内容。您的list1list2已在此代码上方初始化,就像您上面一样。

NewList = []
for item1 in list1:
    for item2 in list2:
        NewList.append(item1*item2)