我有一个数字列表:
list1 = [33,11,42,53,12,67,74,34,78,10,23]
我需要做的是计算列表中的数字总数,然后除以360以计算出圆的部分。对于这个例子,它将是32.我在下面做了:
def heading():
for heading_loop in range(len(list1)):
heading_deg = (360 / len(list1))
return heading_deg
我遇到的问题是,每次循环运行时,我需要将数字(heading_deg)附加到最后一个数字。 E.g。
run 1: 32
run 2: 64
run 3: 96
run 4: 128
等等
任何想法?目前所做的一切都是32次,11次。
谢谢!
答案 0 :(得分:2)
我猜你正在寻找累积总和:
def func(list1):
tot_sum = 0
add = 360/len(list1)
for _ in xrange(len(list1)):
tot_sum += add
yield tot_sum
>>> for x in func(list1):
print x
32
64
96
128
160
192
224
256
288
320
352
答案 1 :(得分:1)
对不起,我已经发布了另一个答案,但我认为您想要做的与您在代码中显示的内容有所不同。看看这是否是你想要的:
def heading():
result=[] #create a void list
numbersum=sum(list1) #"calculate the total amount of numbers in the list"
# e.g. if list=[1,1,2] sum(list) return 1+1+2.
for i in range(len(list1)):
result.append(((list1[i])/float(numbersum))*360) # calculate portion of the circle ("then divide by 360 to work out portions of a circle")
#in this case if you have a list A=[250,250] the function will return two angle of 180°
#however you can return portion of the circle in percent e.g. 0.50 is half a circle 1 is the whole circle simply removing "*360" from the code above
return result
如果您尝试:
test=heading()
print test
print sum(test)
最后一个应该打印360°。
答案 2 :(得分:0)
我不想要你想要什么。 返回相同的值是正常的,您不使用heading_loop。 因此,heading_deg =(360 / len(list1))已经是相同的结果了。
如何在迭代中获得32,然后是64,然后是96?
答案 3 :(得分:0)
我假设圆的部分是均匀分布的。
你的代码的问题在于尽管heading_deg被多次计算,但它总是以相同的方式计算,因为360/len(list1)
永远不会改变。正如Ashiwni指出的那样,你确实需要一笔累计金额。如果您需要将累积和作为函数输出返回,则可以使用生成器:
def heading():
deg = (360 / len(list1))
for heading_loop in range(len(list1)):
yield (heading_loop+1)*deg
使用发电机:
heading_deg_gen = heading()
print heading_deg_gen.next() # prints 32
print heading_deg_gen.next() # prints 64
# or, you can loop through the values
for heading_deg in heading_deg_gen:
print heading_deg # prints the rest of the values up to 360
此外,通过使用整数运算,您在这里会失去一些精度。在某些情况下,这可能很好甚至是理想的,但如果您想要更准确的答案,请改用360.0/len(list1)
。
答案 4 :(得分:0)
只需使用你的循环计数器&将计算结果附加到列表中。
list1 = [33, 11, 42, 53, 12, 67, 74, 34, 78, 10, 23]
def heading():
heading_deg = []
for heading_loop in range( len( list1 ) ):
heading_deg.append( ( 360 / len( list1 ) ) * ( heading_loop + 1 ) )
return heading_deg
返回值为:
[32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352]