【问题标题】:How do I multiply a list of elements with another list of lists in Python如何在 Python 中将元素列表与另一个列表列表相乘
【发布时间】:2019-03-05 01:44:29
【问题描述】:

我有两个任意数字的列表:list_1 = [2,4]list_2 = [[10,20,30], [100,1000,10000]] 我需要list_1(即list_1[0])的第一个索引与list_2[0](即子列表)中的每个数字相乘。下一个索引也应该发生同样的情况,例如在 for 循环中。
到目前为止我已经尝试过

list_1 = [2,4]
list_2 = [[10,20,30], [100,1000,10000]]
for i in list_1:
    for j in list_2:
        print(i * j)

代码要么复制列表,要么向我抛出错误。任何帮助深表感谢。

【问题讨论】:

  • list_2listlists。您想将子lists 中的值相乘(展平list_2 使得内部list 结构被忽略)?复制list 是正确的行为,否则2 * [10, 20, 30] 是序列乘法,应该产生[10, 20, 30, 10, 20, 30]
  • 我需要 list_1[0] 或 2,与 list_2 的第一个子列表中的每个数字相乘,得到 20、40、60。然后 list_1[1] 或 4 与 list_2( sub_list 2) 并给出 400, 4000, 40000

标签: python python-3.x


【解决方案1】:

如果我没看错,例如,您希望list_1[0]list_2[0] 的每个元素相乘,list_1[1]list_2[1] 的每个元素相乘。正确的做法是将zip list_1list_2 放在一起(将乘​​数和关联的子list 成对),然后在子list 上进行内循环:

for op1, sublist in zip(list_1, list_2):
    for op2 in sublist:
        print(op1 * op2)

您的代码失败了,因为您(实际上)试图将op1 乘以每个 sublist,而不是一个内容 > sublist,因此您调用了序列乘法,执行2 * [10, 20, 30] 得到[10, 20, 30, 10, 20, 30],并执行2 * [100, 1000, 10000] 得到[100, 1000, 10000, 100, 1000, 10000],而不是分别将2 乘以102030符合预期。

【讨论】:

    【解决方案2】:
        list_1 = [2,4]
        list_2 = [[10,20,30], [100,1000,10000]] 
        for i in range(len(list_1)):
    ...     for item in list_2:
    ...             for j in range(len(item)):
    ...                     print(list_1[i]*item[j])
    

    返回

    20
    40
    60
    200
    2000
    20000
    40
    80
    120
    400
    4000
    40000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 2019-02-23
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多