2016-10-25 76 views
1

我想將2D列表中的一個元素乘以整數。但是,一旦我執行代碼,我會得到以下結果:我期待結果只是一個元組而不是一個列表,並希望它是一個元組而不是一個列表。Python - 從2D列表中乘以一個元素

[3, 3, 3] 
[6, 6, 3, 3, 3, 3] 

這是我的代碼:

list = [[0.5],[0.3],[0.1]] 

def funcOne(juv):  
    newAd = juv * list[0] 
    return newAd 

def funcTwo(ad,sen): 
    newSen = (ad* list[1]) + (sen* list[2]) 
    return newSen 

print(funcOne(3)) 
print(funcTwo(2,4)) 

我給funcOne期望的輸出將是有3×0.5 = 1.5 ,其中 「0.5」 是列表[0]。我不確定如何編輯我的代碼以實現此結果。

+0

目前尚不清楚。請您可以編輯帶有樣本輸入和所需輸出的問題,以便讓其他人更清楚 –

+1

默認情況下,列表乘以一個列表將返回一個列表。如果你想要它返回一個元組,你將不得不將它作爲一個。 (例如返回元組(newAd))。你是否確實是指「元組」?我可能讀錯了,但這聽起來像是你期待着一個非常不同的輸出。 – TripleD

+0

@TripleD嗨,我編輯了我的代碼,而且我做**想要一個元組輸出,比如3 * list [0]輸出1.5。這是因爲list [0]等於0.5 – Test1234

回答

2

其實我仍然對你對預期產出的解釋感到困惑。我只是運行代碼的輸出如下:

[0.5, 0.5, 0.5] 
[0.3, 0.3, 0.1, 0.1, 0.1, 0.1] 

你的函數會返回一個列表,而不是在二維矩陣相乘的要素之一的原因是你在2D矩陣使用索引的元素以錯誤的方式。 這裏是你的代碼:

list = [[0.5],[0.3],[0.1]] 

def funcOne(juv):  
    newAd = juv * list[0] 
    return newAd 

def funcTwo(ad,sen): 
    newSen = (ad* list[1]) + (sen* list[2]) 
    return newSen 

print(funcOne(3)) 
print(funcTwo(2,4)) 

在你的代碼,當你在功能funcOne使用juv * list[0],其實際執行爲3 * [0.5],其中[0.5]是二維矩陣(表)的第一個元素。你可以運行Python解釋器,發現3 * [0.5]的結果是[0.5, 0.5, 0.5],這意味着它只是複製列表中的元素三次。

如果要計算像[[0.5 * 3], [0.3], [0.1]],你應該改變你的代碼的一點點如下:

def funcOne(juv):  
    newAd = juv * list[0][0] 
    return newAd 

def funcTwo(ad,sen): 
    newSen = (ad* list[1][0]) + (sen* list[2][0]) 
    return newSen 

----------更新

如果你想返回列表,如[[1.5], [0.3], [0.1]]。將代碼更改爲

def funcOne(juv):  
    list[0][0] = juv * list[0][0] 
    return list 

希望它有幫助。

+0

抱歉誤會。我希望funcOne的輸出是3 * 0.5 = 1.5,其中「0.5」是列表[0]。我不確定如何編輯我的代碼以實現此結果。 – Test1234

+0

如果您只想返回特定值'1.5',則可以使用上面編輯的功能。如果你想返回一個像[[1.5],[0.3],[0.1]]的列表。您可以更改代碼,如下所示: – JoshuaW1990

+0

我想知道您是否能夠解釋爲什麼我需要列表[0] [0]? – Test1234

0

只返回list轉換爲tuple

def funcOne(juv):  
    newAd = juv * list[0] 
    return tuple(newAd) # convert to tuple 

也是一樣的funcTwo


然後,重現您想要的輸出使用:

>>> list = [[3], [6], [3]] 
>>> print(funcOne(3)) 
(3, 3, 3) 
>>> print(funcTwo(2, 4)) 
(6, 6, 3, 3, 3, 3) 
相關問題