我已经开始自学Python了,作为练习,我自己设定了生成另一个项目所需的查找表的任务。
我需要生成256个元素的列表,其中每个元素都是math.sin(2*i*pi/256)
的值。问题是,我不知道如何生成一个初始化为“虚拟”值的列表,然后我可以使用for循环逐步执行并分配sin
函数的值。
使用list()似乎创建了一个“空”列表,但没有元素,所以我在循环中得到“列表赋值索引超出范围”错误。有没有办法解决这个问题,除了显式创建一个包含256个元素的列表声明,所有元素都以“0”作为值?
答案 0 :(得分:8)
两个答案已经向您展示了如何使用“list comprehension”(AKA“listcomp”)构造一次构建列表。
回答你的具体问题,
mylist = [None] * 256
是制作包含256个项目的列表的最简单方法,全部为None
,以防您以后填写。
如果您从一个空列表开始,请调用其.append(...)
方法在末尾添加每个项目。在最初为空的列表上只执行append
的循环通常会被更简洁的listcomp替换。
当然,对于你实际陈述的任务,
mylist = [math.sin(2 * math.pi/256)] * 256
到目前为止是最好的方法 - 当参数总是相同时,没有意义计算sin
256次(大胆地假设你说的是你意味着什么; - 。)
答案 1 :(得分:5)
my_list = [math.sin(2 * math.pi/256) for i in xrange(256)]
答案 2 :(得分:1)
我需要生成一个256的列表 每个元素都是的元素 math.sin的值(2 * math.pi / 256)
按字面意思回答你的问题:
my_list=[math.sin(2*math.pi/256)]*256
答案 3 :(得分:1)
您也可以尝试:
l = []
for i in range(256):
l.append(math.sin(2*math.pi/256))
这是一个迭代的for
循环,它不断将相同的值添加到列表的末尾256次
答案 4 :(得分:0)
感谢大家的帮助。我在为问题发布的规范中确实犯了一个错误,因为列表中每个元素的值需要每次以2 * pi / 256的角度递增。在这种情况下适合我的代码是:
li = [math.sin((2*math.pi/256)*i) for i in xrange(0,256)]