Хранить элементы в списке, цифры которого составляют определенное значение

#python #list #sum

#python #Список #сумма

Вопрос:

Из списка найдите те значения, добавление которых составляет 9

 aList=[81,26,27,19,108]
output, 81(because: 8 1),27(because: 2 7) and 108 (because:1 0 8) 
 

Я попробовал 2 подхода:

1-й подход: я не смог найти способ получить значение, просто получить сумму

 s=[81,18]  
sum=0
for l in s:
    while l:
            l,dig=divmod(l,10)
            sum=sum dig

print(sum)
 

2-й подход: действительно неприятный. Возьмите отдельные значения из списка, преобразуйте в строку, чтобы разделить их, и снова преобразуйте в int.

 s=[81]  #9

sum=0

for item in s: #81
    item=str(item) # 81 to string so I can get 8 and 1
    for i in item:
        while i:
            i =int(i)
            i,dig=divmod(i,10)
            sum=sum dig

print(sum,item)
 

Проблема: в обоих случаях это работает только тогда, когда у меня есть единственное значение в списке. Когда у меня более 1 значения aList=[81,18], это дает мне сумму этих 2.

Я был бы признателен за некоторые подсказки / идеи по этому вопросу. Заранее спасибо.

Комментарии:

1. Подумайте о том, как настроены циклы — и когда вам нужно получить значение? Когда вам нужно сбросить переменную sum?

Ответ №1:

Вы могли бы использовать следующее понимание списка:

 l = [81,26,27,19,108]
[i for i in l if sum(int(d) for d in str(i)) == 9]
# [81, 27, 108]
 

Что эквивалентно следующему циклу for:

 res = []
for i in aList:
    temp = []
    for d in str(i):
        temp.append(int(d))
    if sum(temp) == 9:
        res.append(i)
 

Комментарии:

1. Спасибо, 1 быстрый вопрос, является ли это версией цикла for для понимания этого списка: для элемента в l: item=str (item) для i в item: результат = сумма (int (i)) печать (результат)