两个列表的元素乘法

时间:2017-03-03 05:26:36

标签: python list raw-input

我正在尝试编写一个程序,该程序接收两个列表并返回一个列表,该列表是每个列表中两个参数的逐个元素乘法。
如果列表的长度不同,则应返回与两者中较短的列表一样长的列表。这就是我写的:

s = raw_input("Enter the first list:")
c = list(s)
c = s.split()
c = map(int, c)

t = raw_input("Enter the second list:")
d = list(t)
d = s.split()
d = map(int, d)

def multiply(c, d):
    cd = [ ]
    for i in range(0, len(c)):
    cd.append(c[i]*d[i])

一般的想法是用户输入数字,将其转换为整数列表。但是,有错误的是不能使用整数的多个字符串和“使用基数10的int()的无效文字”。我现在已经工作了2个小时,我无法弄清楚该做什么!请帮忙!

6 个答案:

答案 0 :(得分:2)

您可以尝试使用乘法运算符进行映射!

>>> from operator import mul
>>> map(mul,c,d)

实施例<!/ P>

>>> from operator import mul
>>> c
[1, 2, 3]
>>> d
[1, 2, 3]
>>> map(mul,c,d)
[1, 4, 9]

希望这有帮助!

答案 1 :(得分:0)

您可以使用本文中提到的与zip混合的列表理解。 请参阅此链接link

答案 2 :(得分:0)

我认为您的代码存在一些拼写错误。它应该是这样的:

s = raw_input("Enter the first list:")
c = s.split()
c = map(int, c)

t = raw_input("Enter the second list:")
d = t.split()
d = map(int, d)

#if you want align two lists,try this:
if len(d)<len(c):
    d.extend([1]*(len(c)-len(d)))
elif len(d)>len(c):
    c.extend([1] * (len(d) - len(c)))
else:
    pass
#you will get c [2,3,1,1,1]  d[4,5,2,6,7]

cd = []
def multiply(c, d):
    for i in range(0, len(c)):
        cd.append(c[i]*d[i])

multiply(c, d)

print cd

或者你可以试试这个:

lista=raw_input("list a")

listb=raw_input("list b")


print [a*b for a,b in zip(map(int,lista.split()),map(int,listb.split()))]

答案 3 :(得分:0)

让我们对您的代码进行一些处理,以便更容易理解。你不小心给错了输入等等。

s = raw_input("Enter the first list:")
c = s.split()
c = list(map(int, c))

t = raw_input("Enter the second list:")
d = t.split()
d = list(map(int, d))

def multiply(c, d):
    cd = [ ]
    for i in range(0, len(c)):
        cd.append(c[i]*d[i])
    return cd

print multiply(c, d)

但是当然你可以像其他答案那样使用列表理解以一行或更多的pythonic方式来实现。

答案 4 :(得分:0)

让我们一步一步。

首先,我们知道我们需要从用户那里读取两个数字列表。为简单起见,我们假设用户可以通过输入一个或多个 space-sperated 值来整个数字列表。例如

1 2 3 4 5

现在我们已经定义了如何输入输入,我们可以正确地解析它。为此,我们将首先使用.split()将输入拆分为字符串列表,然后使用列表推导将每个字符串转换为实际数字。但是因为我们必须使用这个逻辑两次,所以我们将它封装在一个名为get_numbers()的函数中:

def get_numbers():
    numbers = input("Enter some numbers: ").split()
    return [int(n) for n in numbers]

现在我们可以使用我们的新功能从用户收集两个数字列表。我将第一个列表list1和第二个list2命名为

list1 = get_numbers()
list2 = get_numbers()

现在我们已经解决了将用户输入到列表中的问题,我们可以将注意力转移到问题的第二部分:

  

返回单个列表,该列表是每个列表中两个参数的逐元素乘法。如果列表的长度不同,则应返回与两者中较短的列表一样长的列表。

让我们从完成第一个要求开始,然后我们将在后面处理第二个。

我们知道我们需要成对地从两个列表中获取每个元素的第n个元素,将它们组合在一起,并将结果放入新的列表中。要完成成对迭代列表的任务,我们可以使用zip()。同样,我们将使用列表理解而不是常规for循环:

[a * b代表a,b代表zip(list1,list2)]

现在让我们将一个函数包含在connivence中,并将其命名为zip_and_multiply()

def zip_and_multiply(list1, list2):
    return [a*b for a, b in zip(list1, list2)]

然而,在没有意识到的情况下,我们也满足了我们的第二个要求(“如果列表的长度不同,它应该返回一个与两个中较短的列表一样长的列表。” )。

你看,如果给zip()两个不同长度的列表,它会在两个列表中最短的一端停止压缩,因此,它完全符合第二个要求。

剩下要做的就是打印zip_and_multiply()list1上使用的list2的结果(变量):

print zip_and_multiply(list1, list2)

在编写了上述所有代码(p!)之后,我们的总体最终程序将是(注意这与上面代码的顺序不同):

def get_numbers():
    numbers = input("Enter some numbers: ").split()
    return [int(n) for n in numbers]

def zip_and_multiply(list1, list2):
        return [a*b for a, b in zip(list1, list2)]

list1 = get_numbers()
list2 = get_numbers()

print zip_and_multiply(list1, list2)

但是应该注意,上面的代码缺少通常在所述程序中的许多代码段,例如正确的错误处理。

答案 5 :(得分:0)

首先,List Comprehension是您解决问题所需的全部内容。现在让我们分解您的问题 -

获取用户的输入 - 用于

“无法使用整数的多个字符串的错误”

问题,假设您正在处理整数值,您需要确保列表中的所有值都是 int 类型。您可以让用户输入值并将其映射到int类型使用 -

user_input = map(int,raw_input(“输入第一个列表:”)。strip()。split(''))

这将从用户那里获取空格分隔的整数,并将它们转换为列表。

现在

“对于带有基数为10的int()的文字无效。”

您需要确保在从用户那里获取输入时只输入整数。如果用户提供字符串或空响应,则会抛出此错误。

将两个列表相乘 - 虽然可能会出现以下情况,但会出现以下情况:

1.两个名单的长度相同。

2.两个名单的长度不等。

您需要检查列表的长度,如果长度不同,则将两个列表中的元素相乘,直到较小列表中的元素用尽,并附加较大列表中的其余元素。以下是问题陈述的代码段 -

c = map(int, raw_input('Enter First List').strip().split(' '))
d = map(int, raw_input('Enter Second List').strip().split(' '))

answer = [c[i]*d[i] if i<min(len(c), len(d)) else (c[i] if \
len(c)>len(d) else d[i]) for i in xrange(max(len(c), len(d)))]

回答将包含所需的结果集。