情况如下。我想总结并最终根据他们的位置计算他们的特定值的平均值。到目前为止,我已经尝试了很多不同的东西,我可以提出以下代码,我似乎无法弄清楚如何将这些不同的位置与其所属的值相匹配。
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个这样的计数,而不只是像这里显示的那样。
答案 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
开始。