我正在尝试编写一个程序,该程序接收两个列表并返回一个列表,该列表是每个列表中两个参数的逐个元素乘法。
如果列表的长度不同,则应返回与两者中较短的列表一样长的列表。这就是我写的:
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个小时,我无法弄清楚该做什么!请帮忙!
答案 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)))]
回答将包含所需的结果集。