如何根据功能从另一个列表创建列表?

-3 python list

我想创建一个列表,其中的值对应于另一个列表。例如,如果我有:

listA = [1, 2, 3, 4, 5,...]
Run Code Online (Sandbox Code Playgroud)

我想创建另一个相同的列表,除了所有值都根据 x^2(或任何其他函数)而变化,给出:

listB = [1, 4, 9, 16,25, ...]
Run Code Online (Sandbox Code Playgroud)

我已经尝试通过执行 while 循环来做到这一点:

listA = [1, 2, 3, 4]
listB = range(1, 4, 1)
i = 0
while i <= 4:
    listB [i] = (listA [i]) ** 2
    i = i + 1
print listA
print listB
Run Code Online (Sandbox Code Playgroud)

但它只是吐出一条错误消息:

Traceback (most recent call last):
  File "/home/tim/Desktop/Python/test.py", line 5, in <module>
    listB [i] = (listA [i]) ** 2
IndexError: list assignment index out of range
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?谢谢

Aja*_*234 5

您可以尝试这样做,使用 lambda 函数将您想要的任何更改应用于列表中的每个元素。在这种情况下,该函数对列表中的每个值进行平方:

listA = [1, 2, 3, 4, 5,...]

operation = lambda x:x**2

new_list = map(operation, listA)
Run Code Online (Sandbox Code Playgroud)

此外,您可以在列表理解中执行函数操作:

new_list = [i**2 for i in listA]
Run Code Online (Sandbox Code Playgroud)


cmd*_*dLP 5

有一种智能语法可以从其他列表中构建列表:

listB = [x*x for x in listA]
Run Code Online (Sandbox Code Playgroud)

编辑:永远不要range直接用作列表,即使它在 Python 2 中生成列表,因为它range在 Python 3 中吐出一个对象。请使用list(range(...))

当列表仅由数字组成时,流行的numpy库提供了更简洁的语法来执行此类列表操作。它使用在某些情况下更快的数组,例如元素乘法。上面的语句可以重写为:

arrayB = arrayA * arrayA
Run Code Online (Sandbox Code Playgroud)

或者

arrayB = arrayA ** 2
Run Code Online (Sandbox Code Playgroud)

或(并不总是推荐)

f = lambda a: a**2
arrayB = f(arrayA)
Run Code Online (Sandbox Code Playgroud)

元素乘法有时被称为 hadamard 乘积,它来自向量算术(a@bnumpy 中也有)。np.array在 numpy 中,您必须使用或创建数组np.arangerange最后一个与 Python 2 中的方式类似,它直接创建一个数组。