ответ рекурсивный является самым компактным разумным способом сделать это, и Ashwini Чаудхари является наиболее гибким и концептуально приятным ... но если вы хотите знать, как сделать свою почти код работу:
Ключом, что вы «Отсутствует» «Как перебирать два списка в режиме блокировки?» Именно для этого и есть zip
. Просто заархивировать два списка вместе, и вы получите это: (. За исключением это итератор, а не список)
[(['jane', '1', '120'], ['jane', '2', '240']),
(['bob', '3', '35'], ['bob', '1', '12']),
(['joe', '5', '70'], ['joe', '1', '100'])]
Остальная часть кода довольно много работ, за исключением того, что вы получили немного запутался в именах. Вот скопированная версия.
def sum_f2_f3(list_a, list_b):
result = []
for element_a, element_b in zip(list_a, list_b):
result_element = [element_a[0],
element_a[1] + element_b[1],
element_a[2] + element_b[2]]
result.append(result_element)
return result
result = sum_f2_f3(sum_f2_f3(a,b), c)
Кроме того, что вы подведение кучи строк.Это совершенно законно, но то, что он получает вас это:
[['jane', '125', '12024045'],
['bob', '310', '35120'],
['joe', '512', '7010030']]
Вы, вероятно, хотел, чтобы преобразовать эти значения в int
в какой-то момент. Если нет, если вы хотите преобразовать в int
, сумму, и преобразовать обратно в str
, это довольно тривиальным:
def sum_f2_f3(list_a, list_b):
result = []
for element_a, element_b in zip(list_a, list_b):
result_element = [element_a[0],
str(int(element_a[1]) + int(element_b[1])),
str(int(element_a[2]) + int(element_b[2]))]
result.append(result_element)
return result
После того, как вы получили это, есть несколько способов, вы можете улучшить его ,
Например, вы всегда можете заменить results = []
, for
петлю и result.append(…)
со списком понимания, как только вы осознаете, что вы попали в точную картину постижение для:
def sum_f2_f3(list_a, list_b):
return [[element_a[0],
element_a[1] + element_b[1],
element_a[2] + element_b[2]]
for elementa, element_b in zip(list_a, list_b)]
Или, вы можете обобщить его на работу на всех трех списков вместе, или даже любое количество lists- zip
уже делает это, и вы можете просто заменить +
с sum
:
def sum_f_lists(*lists):
results = []
for elements in zip(*lists):
result_element = [elements[0][0],
sum(element[1] for element in elements),
суммы (элемент [2] для элемента элементов)] result.append (result_element) возвращаемого результат
Или вы можете заставить его работать на 0 или более цифр, а не ровно два, или не зависит от заказа, и т. д. Когда вы делаете это достаточно далеко, шаг за шагом, вы получите что-то вроде одного из двух других ответов.
Маленькая точка, все ваши поля - это строки. –
@BurhanKhalid Да, вы правы ... Я должен был сказать, что в под списках есть «имя», «номер», «номер». – svenglar
У вас есть '' '' '' '' '' '' jane' в 'примере' вашего результата вашего примера. Кроме того, как и в общем комментарии, я чувствую, что вложенные 'list' должны быть объектами. Это может сделать ваши списки понятными более читабельными. (Имена атрибутов вместо таинственных индексов.) – jpmc26