簡體   English   中英

如何將列表中的每個元素提升到其相應的索引號?

[英]How do I raise every element in a list to its corresponding index number?

所以如果輸入是[3, 2, 5] ,輸出將是[1, 2, 25] ,如果輸入是[5, 10, 20] ,輸出將是[1, 10, 400] ( 5^0、10^1、20^2)

您可以在輸入列表和范圍之間使用映射。

def raise_power(input_list):
    return list(map(lambda x,y: x**y, input_list, range(len(input_list))))

或者更直接的方式(由@roganjosh 建議)可以是:

def raise_power(input_list):
    return [i**x for x, i in enumerate(input_list)]

兩者在計算時間上沒有顯着差異。 (見評論)

一個非常簡單的方法是使用如下循環

for i in range(0,len(input)):
print(input[i]**i)

您自己的解決方案既不正確也不 pythonic 。 這是您的代碼將失敗:

所以如果我的輸入是:

3 2 5 3 2 5

輸出應該是:

[1, 2, 25, 27, 16, 3125]

但是你的代碼會給出:

[1, 2, 25, 1, 2, 25]

因為在 3,2,5 之后,當 3 再次出現在列表中時,index(i) 將選擇列表中的前 3 個,而不是第二個 3 或第三個或任何一個。 所以 index 總是會選擇第一個出現的數字,因此你會得到錯誤的輸出。

正確的方法是使用 enumerate :

print([j**i for i,j in enumerate([int(i) for i in input().split()])])

輸出:

[1, 2, 25, 27, 16, 3125]

您需要將輸入拆分為一個列表,然后使用 enumerate 獲取索引位置和值。 由於該值將是一個字符串,因此使用 int 進行轉換,然后將其提升到冪。

x = input('Enter the list of numbers : ')
y = [int(i) for i in x.split(',')]
print ([int(a)**i for i,a in enumerate(y)])

代碼輸出將是:

Enter the list of numbers : 3,2,5
[1, 2, 25]

其實是我自己想出來的! 我相信你們都非常自豪。 下面的代碼將產生我正在尋找的輸出。 不過還是謝謝你!

 firstlist = [int(x) for x in input().split()] newlist = [i ** (int(firstlist.index(i))) for i in firstlist]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM