假设我有以下列表名称= 'tan','2','alp','3','tan','4','alp','3','tan','1‘
奇数索引元素是一些值,偶数索引元素是它们出现的次数(例如,alp发生了6次3+3 =)
我试着做代码来做这件事。
在这里输入代码
names = ['tan','2','alp','3','tan','4','alp','3','tan','1']
i = 1;
dd = names[0::2]
nn = names[1::2]
ct = [0 for cc in range(len(dd))];
le = len(dd);
for i in range(0, le):
ct[i] = int(nn[i])
for j in range(i+1, le):
if (j < le) and (dd[i] == dd[j]):
ct[i] += int(nn[j]);
del(dd[j])
# del(nn[j])
le -= 1ct的输出是9,7,4,3,1,但是对于tan和alp,它应该是7,6-7,6-7。
如果我没有注释del(nnj) --我将等于le,代码将停止。
但是,我应该删除元素和它在第一次之后发生的次数(在ct中确定添加之后),这样计数过程就不会重复。
知道怎么做吗?
发布于 2017-12-10 22:41:38
这相对容易--从奇数元素构建一个查找映射,然后对匹配的偶数值进行求和。您可以使用collections.defaultdict()使您的生活更轻松:
import collections
names = ['tan', '2', 'alp', '3', 'tan', '4', 'alp', '3', 'tan', '1']
lookup_map = collections.defaultdict(int)
for element, value in zip(names[0::2], names[1::2]):
lookup_map[element] += int(value)
print(dict(lookup_map)) # {'tan': 7, 'alp': 6}如果您确实只需要值并且需要保持顺序,则可以添加一个附加步骤:
result = [lookup_map.pop(element) for element in names[0::2] if element in lookup_map]
print(result) # [7, 6]如果您在每个元素计算的事件/总次数之后,只需在整个查找地图上应用总和:
sum_total = sum(lookup_map.values())
for name in lookup_map:
lookup_map[name] /= sum_total
print(dict(lookup_map)) # {'alp': 0.46153846153846156, 'tan': 0.5384615384615384}发布于 2017-12-10 22:38:59
比起列表,我们可以更容易地使用字典来记录计数。下面我使用一个defaultdict,它是支持默认值的标准库中的dict子类。
from collections import defaultdict
names = ['tan','2','alp','3','tan','4','alp','3','tan','1']
d=defaultdict(int)
for name, count in zip(*[iter(names)]*2):
d[name] += int(count)发布于 2017-12-10 22:45:30
您可以使用un对象来存储每个名称的出现。
names = ['tan','2','alp','3','tan','4','alp','3','tan','1']
# Use an object to store occurences
results = {}
# Iterate through 'names' to get occurences
for i in range(len(names)):
if i % 2 == 0:
# Store them in the object
if names[i] in results: # if 'name' exist in results object
results[names[i]] += int(names[i+1])
else: # if it doesn't
results[names[i]] = int(names[i+1])
# Get the value only array
res_arr = [v for k,v in results.items()]
print results
print res_arr这将产生以下结果:
{'tan': 7, 'alp': 6}
[7, 6]https://stackoverflow.com/questions/47744106
复制相似问题