2017-03-10 332 views
3

編輯2:我已經刪除了其餘的代碼,所以我不會破壞解決方案。感謝您的幫助。python:如何將列表中的每個值與另一個列表中的所有值相乘

編輯:我包括我的整個代碼。我不想包含它,因爲我不想讓任何人自己試圖解決這個問題。但我需要幫助,所以在這裏。

我手動通過執行以下操作來完成此操作,但我希望這可以在更大的範圍內工作,並且我拒絕多次手動複製和粘貼。這不是編寫代碼的要點。

x = [] 
y = [] 

for i in range(len(x)-1): 
products.append(x[0] * y[i]) 
products.append(x[1] * y[i]) 
products.append(x[2] * y[i]) 
products.append(x[3] * y[i]) 
products.append(x[4] * y[i]) 
products.append(x[5] * y[i]) 
products.append(x[6] * y[i]) 
products.append(x[7] * y[i]) 
products.append(x[8] * y[i]) 
products.append(x[9] * y[i]) 
products.append(x[10] * y[i]) 
products.append(x[11] * y[i]) 
products.append(x[12] * y[i]) 
products.append(x[13] * y[i]) 
products.append(x[14] * y[i]) 
products.append(x[15] * y[i]) 
products.append(x[16] * y[i]) 
products.append(x[17] * y[i]) 
products.append(x[18] * y[i]) 
products.append(x[19] * y[i]) 
products.append(x[20] * y[i]) 
products.append(x[21] * y[i]) 
products.append(x[22] * y[i]) 
products.append(x[23] * y[i]) 
products.append(x[24] * y[i]) 
products.append(x[25] * y[i]) 
products.append(x[26] * y[i]) 
products.append(x[27] * y[i]) 
products.append(x[28] * y[i]) 
products.append(x[29] * y[i]) 
products.append(x[30] * y[i]) 
products.append(x[31] * y[i]) 
products.append(x[32] * y[i]) 
products.append(x[33] * y[i]) 
products.append(x[34] * y[i]) 
products.append(x[35] * y[i]) 
products.append(x[36] * y[i]) 
products.append(x[37] * y[i]) 
products.append(x[38] * y[i]) 
products.append(x[39] * y[i]) 
products.append(x[40] * y[i]) 
products.append(x[41] * y[i]) 
products.append(x[42] * y[i]) 
products.append(x[43] * y[i]) 
products.append(x[44] * y[i]) 
products.append(x[45] * y[i]) 
products.append(x[46] * y[i]) 
products.append(x[47] * y[i]) 
products.append(x[48] * y[i]) 
products.append(x[49] * y[i]) 
products.append(x[50] * y[i]) 
products.append(x[51] * y[i]) 
products.append(x[52] * y[i]) 
products.append(x[53] * y[i]) 
products.append(x[54] * y[i]) 
products.append(x[55] * y[i]) 
products.append(x[56] * y[i]) 
products.append(x[57] * y[i]) 
products.append(x[58] * y[i]) 
products.append(x[59] * y[i]) 
products.append(x[60] * y[i]) 
products.append(x[61] * y[i]) 
products.append(x[62] * y[i]) 
products.append(x[63] * y[i]) 
products.append(x[64] * y[i]) 
products.append(x[65] * y[i]) 
products.append(x[66] * y[i]) 
products.append(x[67] * y[i]) 
products.append(x[68] * y[i]) 
products.append(x[69] * y[i]) 
products.append(x[70] * y[i]) 
products.append(x[71] * y[i]) 
products.append(x[72] * y[i]) 
products.append(x[73] * y[i]) 
products.append(x[74] * y[i]) 
products.append(x[75] * y[i]) 
products.append(x[76] * y[i]) 
products.append(x[77] * y[i]) 
products.append(x[78] * y[i]) 
products.append(x[79] * y[i]) 
products.append(x[80] * y[i]) 
products.append(x[81] * y[i]) 
products.append(x[82] * y[i]) 
products.append(x[83] * y[i]) 
products.append(x[84] * y[i]) 
products.append(x[85] * y[i]) 
products.append(x[86] * y[i]) 
products.append(x[87] * y[i]) 
products.append(x[88] * y[i]) 
products.append(x[89] * y[i]) 

我知道如果你重複代碼,你做錯了。我無法弄清楚如何讓這個工作。

我試過x [i] * y [i],但它只是取每個值的第一個值並將它們相乘。

我試着把另一個for循環裏面,但是也沒有工作(相同的結果)。

我嘗試了一個while循環,j = 0,並且每次將j增加1,但這也不起作用(相同的結果)。

請幫我理解我該如何做到這一點。我知道這是可能的。我一直在python練習一週,所以請給我一個休息時間,我知道這是一個愚蠢的問題。

+0

請告訴我們您的輸入和預期的輸出。 – McGrady

+0

好的我將用整個代碼編輯 – vampiire

+0

@McGrady我用整個代碼編輯過。我不想破壞解決方案,但在這裏。我知道這適用於測試用例,我想擴展它以適應問題陳述,但是我無法多次複製和粘貼它。 – vampiire

回答

1

有沒有必要做

for i in range(10, 100): 
    x.append(i) 

您可以從一個range對象這樣做一個清單:

x = list(range(10, 100)) 

但是,沒有必要製作那些xy列表。您可以通過直接在範圍內迭代來創建產品列表。例如:

products = [] 
for x in range(10, 100): 
    for y in range(10, 100): 
     products.append(x * y) 

爲了使剛剛包含迴文列表:

def is_palindrome(n): 
    s = str(n) 
    return s == s[::-1] 

products = [] 
for x in range(10, 100): 
    for y in range(10, 100): 
     n = x * y 
     if is_palindrome(n): 
      products.append(n) 

那麼你可以做max(products)發現是兩個二位數字的產品最高迴文。

這裏有一個更緊湊的方式,使用生成的表達,所以它並不需要建立一個列表:

r = range(10, 100) 
print(max(filter(is_palindrome, (x * y for x in r for y in r)))) 
+0

聖切斯特。你只是壓縮了我的整個代碼,使我連續3天開始和結束兩行。你是一個精靈 – vampiire

+0

......它立即運行。我不知道你是誰,但對我而言,你剛剛做的是傳奇。我唯一的問題是,爲什麼is_palindrome在'generator expression'中不需要參數'n'? – vampiire

+0

@vampiire呃,我已經使用Python超過10年了,並且使用各種語言編程了數十年,所以我學到了一些技巧。 :)但是,一旦你瞭解了[generator表達式](https://docs.python.org/3/tutorial/classes.html#generator-expressions)和[過濾](https://docs.python.org/3/library/functions.html#filter)函數。 –

2

您需要使用嵌套循環

x = [] 
y = [] 
products = [] 
palindromes = [] 

for i in range(10, 100): 
    x.append(i) 
# print(x) 

for i in range(10, 100): 
    y.append(i) 
# print(y) 

for i in range(len(y)): 
    for j in range(len(x)): 
     products.append(x[j] * y[i]) 


for i in range((len(products)-1)): 
    a = str(products[i]) 
    b = tuple(a) 
    c = b[::-1] 
    if b == c: 
     print('palindrome found!', a) 
     print('b value:', b) 
     print('c value:', c) 
     palindromes.append(a) 

solutions = list(map(int, palindromes)) 
solutions.sort() 
print(solutions) 

這就是所謂的嵌套循環。變量i迭代的Y減1和變量j的長度迭代爲x的長度減去1

+0

我試過這個,並沒有給我同樣的結果。讓我再嘗試也許(更可能)我搞砸了。 – vampiire

+0

不,這不起作用。不會產生與我之前手動複製/粘貼方式相同的結果。任何建議? – vampiire

+0

@vampiire它應該工作,因爲我做了同樣的事情,我看到相同的輸出。所以我已將解決方案與您的實際代碼集成在一起。 –

0

您的循環是相同的:

products=[i*j for i in x[:-1] for j in y] 
-1

您可以使用Kaushal庫馬爾·辛格的解決方案,或這裏有兩個其他解決方案。但是,在編程中沒有通用的解決方案,很多解決方案可以共存。

代碼1:

products = [i * j for i, j in zip(x, y)] 

代碼2:

from operator import mul 

products = list(map(mul, x, y)) 
+0

這只是將2個列表的相應元素放在一起,即'x [0] * y [0],x [1] * y [1]'等。這不是OP想要做的。 –

+0

沒錯。它歸結爲嵌套for循環。我嘗試這個時遇到的問題是使用l​​en(x)-1而不是len(x)作爲範圍。 – vampiire

相關問題