Python在循环中添加数字

时间:2013-08-28 13:25:40

标签: python for-loop

我有一个数字列表:

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次。

谢谢!

5 个答案:

答案 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]