1

我有一个数字列表:

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)。例如

run 1:  32
run 2:  64
run 3:  96
run 4:  128

等等等等

有任何想法吗??目前它所做的一切都返回 32、11 次。

谢谢!!

4

5 回答 5

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
于 2013-08-28T13:32:58.253 回答
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°。

于 2013-08-28T14:41:13.853 回答
0

我不明白你想要什么。返回相同的值是正常的,你不使用heading_loop。因此,heading_deg = (360 / len(list1)) 已经是相同的结果。

在迭代中如何有 32、64、96?

于 2013-08-28T13:36:29.063 回答
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)改用。

于 2013-08-28T13:37:13.180 回答
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]
于 2013-08-28T13:40:39.700 回答