使用Python,我如何将列表中的每个元素都提升到相应的索引号?

时间:2018-02-05 21:30:46

标签: python python-3.x

因此,如果输入为[3,2,5],则输出为[1,2,25],如果输入为[5,10,20],则输出为[1,10, 400] (5 ^ 0,10 ^ 1,20 ^ 2)

5 个答案:

答案 0 :(得分:0)

我认为这是一个错字,我认为你的3不会成为2(并保持3) 您可以在输入列表和范围之间使用地图。

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

两者在计算时间上没有显着差异。 (见评论)

答案 1 :(得分:0)

一种非常简单的方法是使用如下的循环

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

答案 2 :(得分:0)

您自己的解决方案既不正确也不是pythonic。这是你的代码将失败:

所以,如果我的输入是:

3 2 5 3 2 5
输出应该是:

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

但是你的代码会给出:

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

因为在3,2,5之后,当列表中再次出现3时,索引(i)将在列表中选择前3而不是第3或第3或任何。因此,索引将始终选择第一个出现的数字,因此您将得到错误的输出。

正确的方法是使用枚举:

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

输出:

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

答案 3 :(得分:0)

您需要将输入拆分为一个列表,然后使用 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]

答案 4 :(得分:-1)

我实际上是自己想出来的!我相信你们都非常自豪。以下代码将生成我正在寻找的输出。谢谢你!

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