如何根据位置求和整数值?

时间:2016-05-14 10:16:19

标签: python python-3.x count

情况如下。我想总结并最终根据他们的位置计算他们的特定值的平均值。到目前为止,我已经尝试了很多不同的东西,我可以提出以下代码,我似乎无法弄清楚如何将这些不同的位置与其所属的值相匹配。

    count_pos = 0

    for character in score:
        asci = ord(character)
        count_pos += 1
        print(count_pos,asci)

        if asci == 10 :
           count_pos = 0

print asci生成以下输出:

1   35

2   52

3   61

4   68

5   70

6   70




1   35

2   49

3   61

4   68

5   68

6   70

数字1-6是位置,其他整数是属于该值的值。所以我基本上要做的是将位置1(35 + 35)的值加起来,这应该给我:70,位置2的值的总和应该给我(52 + 49):101和这个为所有职位。

到目前为止,我唯一想到的就是比较这样的计数器:

    if count_pos == count_pos:
       #Do calculation

注意:这只是数据的一部分。真实的数据就像这样,超过1000个这样的计数,而不只是像这里显示的那样。

2 个答案:

答案 0 :(得分:0)

如果要在两个列表中添加两个列表,则可以执行此操作:

使用zip

[x + y for x, y in zip(List1, List2)]

zipped_list = zip(List1,List2)
print([sum(item) for item in zipped_list])

例如:如果列表是,

List1=[1, 2, 3]
List2=[4, 5, 6]

输出为:[5, 7, 9]

使用Numpy:

import numpy as np
all = [list1,list2,list3 ...]
result = sum(map(np.array, all))

例如:

>>> li=[1,3]
>>> li1=[1,3]
>>> li2=[1,3]
>>> li3=[1,3]
>>> import numpy as np
>>> all=[li,li1,li2,li3]
>>> mylist = sum(map(np.array, all))
>>> mylist
array([ 4, 12])

答案 1 :(得分:0)

解决方案

这样可行:

from collections import defaultdict

score = '#4=DFF\n#1=DDF\n'
res = defaultdict(int)
for entry in score.splitlines():
    for pos, char in enumerate(entry, 1):
        res[pos] += ord(char)

现在:

>>> res
defaultdict(int, {1: 70, 2: 101, 3: 122, 4: 136, 5: 138, 6: 140})
>>> res[1]
70
>>> res[2]
101

步骤

您的分数字符串如下所示(从您的asci数字中提取):

score = '#4=DFF\n#1=DDF\n'

而不是查找asci == 10,而只是将新行字符拆分为 字符串方法splitlines()

模块defaultdict中的collections为您提供了一个字典 你可以用一个功能启动。我们在这里使用int()。如果我们访问密钥不存在,那将调用int()。所以,如果你这样做:

res[pos] += ord(char)

并且密钥pos尚未退出,它会调用int(),这会产生0 你可以添加你的号码。下一次,如果数量 pos已经是您字典中的一个键,您将获得该值并添加 对此,总结每个职位的价值。

此处enumerate

for pos, char in enumerate(entry, 1):

为您提供名为pos的每一行中的位置,从1开始。