如何将压缩列表中的项目彼此相乘​​?

问题描述

我正在做一个练习,其中我创建一个函数来接收两个列表,并在单独的单个列表中返回相同索引处项目的乘法。示例:

transform("1 5 3","2 6 -1")
#should return
[2,30,-3]

为清楚起见,该程序采用索引1、2和3的项并将它们相乘,如下所示:

(1 * 2),(5 * 6),(3 * -1)

现在,我面临的问题是必须在程序中使用zip()函数,而我尚未正确使用它。

我已经编写了一个可以成功完成常规任务的程序,但是我找不到能使用压缩列表的解决方案。有人可以帮我吗?我有一个想法,我可以使用在map()函数中创建的压缩列表“ q”,但是我不知道怎么做。

这是我的程序:

def transform(s1,s2):
    i = 0

    s = s1.split(' ')
    d = s2.split(' ')

    while i < len(s):
        try:
            s[i] = int(s[i])
            d[i] = int(d[i])
            i += 1
        except ValueError:
            break

    print(s,d)

    q = list(zip(s,d))
    print(q)

    final = list(map(lambda x,y: x * y,s,d))

    return final

def main():
    print(transform("1 5 3","2 6 -1"))

if __name__ == "__main__":
    main()

在此先感谢您的帮助!

解决方法

这应该做您想要的:

def transform(a,b):
     return [int(i) * int(j) for i,j in zip(a.split(),b.split())]



a = "1 5 3"
b = "2 6 -1"
print(transform(a,b))  # [2,30,-3]

使用splitzip应该很简单。然后list comprehension创建列表。

,
s1 = '1 5 3'
s2 = '2 6 -1'

def transform(s1,s2):
    return [x*y for x,y in zip([int(x) for x in s1.split()],[int(x) for x in s2.split()])]

transform(s1,s2)

输出

[2,-3]
,
  1. 要轻松地将一个字符串转换为字符串列表,请使用map

    s = "1 2 3"
    list(map(int,s.split())) 
    > [1,2,3]
    
  2. 然后压缩2个列表

    zip(map(int,s1.split()),map(int,s2.split()))
    > [(1,2),(5,6),(3,-1)]`
    
  3. 最后,您想对每对应用lambda x: x[0] * x[1]operator.mul(x[0],x[1])

from operator import mul

def transform(s1,s2):
    return list(map(lambda x: mul(*x),zip(map(int,s2.split()))))
,

尝试一下

item1,item2 =  "1 5 3","2 6 -1"

def transform(i1,i2):
    return [int(x) * int(y) for x,y in zip(i1.split(" "),i2.split(" "))]

print(transform(item1,item2))