#python #list #for-loop
#python #Список #для цикла
Вопрос:
В следующем коде я хочу добавить вторые параметры списка=[(0,3),(2,6),(1,10)] в цикле for. первая итерация должна быть 3 6 = 9, а вторая итерация должна добавить результат предыдущей итерации, который равен 9 10—> 9 10=19 и я хочу, чтобы конечный результат S = [9,19]. Я не уверен, как это сделать, должен ли я добавить еще один цикл в свой код?
T=[(0,3),(2,6),(1,10)]
S=[]
for i in range(len(T)):
b=T[0][i] T[0][i 1]
S.append(b)
Ответ №1:
используйте itertools.accumulate
spam = [(0,3),(2,6),(1,10)]
from itertools import accumulate
print(list(accumulate(item[-1] for item in spam))[1:])
вывод
[9, 19]
Ответ №2:
- Используйте для объединения значений из , с тем же индексом.
zip
tuples
- Используйте выражение присваивания (из python 3.8) в понимании списка для
sum
значений во второмtuple
,T[1]
, изT
.
T = [(0,3),(2,6),(1,10)]
T = list(zip(*T))
print(T)
[out]:
[(0, 2, 1), (3, 6, 10)]
# use an assignment expression to sum T[1]
total = T[1][0] # 3
S = [total := total v for v in T[1][1:]]
print(S)
[out]:
[9, 19]
Ответ №3:
Просто измените свой код, как показано ниже
T=[(0,3),(2,6),(1,10)]
S=[]
b = T[0][1]
for i in range(1,len(T)):
b =T[i][1]
S.append(b)
Ответ №4:
Это должно помочь вам:
T=[(0,3),(2,6),(1,10)]
lst = [T[i][1] for i in range(len(T))]
final_lst = []
for x in range(2,len(lst) 1):
final_lst.append(sum(lst[:x]))
print(final_lst)
Вывод:
[9, 19]
Если вы предпочитаете list comprehension
, используйте эту строку вместо последней for loop
:
[final_lst.append(sum(lst[:x])) for x in range(2,len(lst) 1)]
Вывод:
[9, 19]
Ответ №5:
Вот решение с собственной рекурсией
import operator
mylist =[(0,3),(2,6),(1,10)]
def accumulate(L, i, op):
def iter(result, rest, out):
if rest == []:
return out
else:
r = op(result, rest[0][i-1])
return iter(r, rest[1:], out [r])
return iter(L[0][i-1], L[1:], [])
print(accumulate(mylist, 2, operator.add))
print(accumulate(mylist, 1, operator.add))
print(accumulate(mylist, 2, operator.mul))
# ==>
# [9, 19]
# [2, 3]
# [18, 180]