在Python中附加到列表的美学方式?

rya*_*lon 1 python syntax list append

将较长的语句附加到列表时,我觉得append阅读起来很尴尬.我想要一个适用于动态列表创建的方法(即不需要先用零初始化等等),但我似乎无法想出另一种方法来做我想做的事情.

例:

import math
mylist = list()
phi = [1,2,3,4] # lets pretend this is of unknown/varying lengths
i, num, radius = 0, 4, 6

while i < num:
    mylist.append(2*math.pi*radius*math.cos(phi[i]))
    i = i + 1
Run Code Online (Sandbox Code Playgroud)

虽然append工作得很好,但我觉得它不太清楚:

mylist[i] = 2*math.pi*radius*math.cos(phi[i])
Run Code Online (Sandbox Code Playgroud)

但是这不起作用,因为该元素在列表中不存在,产生:

IndexError: list assignment index out of range
Run Code Online (Sandbox Code Playgroud)


可以将结果值分配给临时变量,并追加它,但这看起来很丑陋且效率低下.

Abh*_*jit 12

您不需要现有列表并在以后附加.只需使用列表理解

列表理解,

  • 很快,
  • 容易理解,
  • 并且可以很容易地作为生成器表达式移植

    >>> import math
    >>> phi = [1,2,3,4]
    >>> i, num, radius = 0, 4, 6
    >>> circum = 2*math.pi*radius
    >>> mylist = [circum * math.cos(p) for p in phi]
    
    Run Code Online (Sandbox Code Playgroud)

查看代码,这里有一些通用的建议

应该写成

circum = 2*math.pi
while i < num:
    mylist.append(circum*math.cos(phi[i]))
    i = i + 1
Run Code Online (Sandbox Code Playgroud)
  • 而不是while使用for-each构造

    for p in phi:
        mylist.append(circum*math.cos(p))
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果表达式不可读,请在Python中读取所有可读性后将其分解为多个语句.