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)查看代码,这里有一些通用的建议
不要在迭代中计算已知常量
while i < num:
mylist.append(2*math.pi*radius*math.cos(phi[i]))
i = i + 1
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中读取所有可读性后将其分解为多个语句.