2017-03-03 308 views
0

我想写一个程序,它需要两个列表并返回一个列表,它是每个列表中两个参数的逐个元素的乘法。
如果列表的长度不同,它应该返回一个列表,其长度与两者中较短的一样长。这是我写的:两个列表的元素相乘

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

对不起,我错误地输入了代码 - 我现在编辑了它! – Jane

+0

如果您有任何建议,我会很感激!这是几个小时,我仍然不知道:( – Jane

+0

你可以提供你的输入原因你使用raw_input需要一个字符串。这将是有益的 –

回答

0

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

+0

我看了一下,我不能让它与raw_input一起工作 – Jane

0

我觉得是你的code.It一些拼写错误,应该是这样的:

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()))] 
+0

非常感谢,它的工作!但是,我必须在代码中使用定义语句。我在print语句之前添加了一个(defMultiple(a,b):),但它一直说a和b没有定义,我分别设置它们为list和listb,但是这并不起作用。如何解决这个问题?再次感谢! – Jane

+0

@Jane你应该在调用你的函数时匹配函数参数,就像调用它;'multiply(a,b)',这些变量将被发送到函数范围内 – umutto

+0

@Jane请检查你的代码和函数参数,你c尝试使用IDE(如Pycharm)可帮助您调试代码。如果此问题得到解决,请接受答案。 – McGrady

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的方式使用列表理解,如其他答案所述。

+0

为什么你说我们不能在一个班轮内完成!? –

+0

谢谢!出于某种原因,当我更改变量时,它停止工作。任何想法,为什么这可能是? – Jane

+0

@KeerthanaPrabhakaran不,我说你可以在一行中完成,但我的答案只是修复OP的错误,而不是实施新的单行解决方案。 @Jane你应该与你的变量保持一致,你的函数'multiply(list1,list2)'需要2个列表,你应该用两个你想要得到的列表调用它。 – umutto

0

让我们一步一个脚印吧。

首先,我们知道我们需要从中读取两个的用户列表中的数字。为了简单起见,让我们假设用户可以输入一个或多个空间分辨率值来填充数字列表。例如。

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()。同样,我们将使用列表理解,而不是为循环常规:

[A * B为A,B拉链(列表1,列表2)]

现在,让我们也包裹在connivence功能,并称之为zip_and_multiply()

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

然而,没有意识到这一点,我们也履行了我们的第二个要求(“如果列表的长度不同,它应该返回一个列表,是只要短这两个。“)。

你会发现,如果zip()有两个不同长度的列表,它会在两个列表中最短的一个结束时停止拉伸,因此它完全满足了第二个要求。

所有剩下要做的就是打印list1list2(变量)使用的zip_and_multiply()结果:

print zip_and_multiply(list1, list2) 

在整体编写所有上面的代码(!唷),我们的最终方案后将(注意,这是一个不同的顺序如何出现上面的代码):但是

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) 

应该注意,上面的代码缺少它们通常在说很多代码段的程序,如正确的错误哈ndling。

2

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

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

例子!

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

希望这有助于!

0

首先,List Comprehension是你所需要的所有问题。现在,让我们崩溃的问题 -

从用户获取输入 - 为

问题

“与不能够多串与整数的错误”,假设你是在整数工作值,则需要确保列表中的所有值都是int。您可以让用户输入值并将其映射到int类型使用 -

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

这将采用用户空格分隔的整数并将它们转换为列表。现在

“无效字面对于int()与底座10”

您需要确保在接受用户输入时只输入整数。如果用户提供一个字符串或一个空的响应,它会抛出这个错误。

乘两个列表 -虽然乘以你的列表下列情况下可能会出现:

1.Both列表是相同的长度。

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)))] 

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

相关问题