Сумма определенных элементов в списке - PullRequest
0 голосов
/ 27 мая 2019

Я работаю над проблемой, связанной с вероятностью. Мне нужно суммировать только определенные элементы в определенном списке.

Я пытался использовать функции "for", но это не сработало. Я ищу способ выбора элементов на основе их позиций в списке и их суммирования.

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Вы можете использовать operator.itemgetter, чтобы выбрать только индексы certian в списке или ключи в dict.

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 для ключей dict, просто используйте 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))
0 голосов
/ 27 мая 2019

Вы действительно должны были поставить больше в свой вопрос, но:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...