2017-03-03 457 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)))] 

答案將包含所需的結果集。