列表中某些项目的总和

时间:2019-05-26 21:45:55

标签: python list

我正在研究与概率有关的问题。我只需要汇总特定列表中的特定项目。

我尝试使用“ for”功能,但没有用。我正在寻找一种根据项目在列表中的位置来选择它们并对其求和的方法。

2 个答案:

答案 0 :(得分:1)

您可以使用operator.itemgetter在列表中仅选择certian索引或在字典中键入键。

from operator import itemgetter

data = [1, 2, 3, 4, 5, 6, 7, 8]
get_indexes = itemgetter(2, 5, 7)
#this will return indexes 2, 5, 7 from a sequence 
sum(get_indexes(data)) #3+6+8
#returns 17

该示例用于列表,但是您也可以将itemgetter用于字典键,也只需使用itemgetter('key2', 'key5', 'key7')({some_dict})

要获取偶数或奇数索引,请使用不枚举切片和循环,这样效率更高,更容易阅读:

even = sum(data[::2])
odd = sum(data[1::2])

您也可以使用过滤器,但我不建议您通过索引获取该信息:

sum(filter(lambda n: data.index(n) % 2 == 0, data))

答案 1 :(得分:0)

您确实应该在问题中添加更多内容,但是:

stuff = [1, 2, 3, 4, 5, 6, 7, 8]
# sum the numbers that have even indices:
funny_total = sum([x for i, x in enumerate(stuff) if i % 2 == 0 ])

funny_total
# 16

那应该让您入门。也可以使用带有for循环的方法。您可能只在代码中存在错误。

stuff = [1, 2, 3, 4, 5, 6, 7, 8]
indices_to_include = [1, 3, 4, 5, 6]
funny_total = 0
for i, x in enumerate(stuff):
    if i in indices_to_include:
        funny_total += x

您还可以:


def keep_every_third(i):
    return i % 3 == 0
# variable definitions as above...
for i, x in enumerate(stuff):
    if keep_every_third(i):
        # do stuff
相关问题