2015-06-15 5 views
0

У меня есть два списка. Например,Добавление строк как целых чисел из двух списков

list1 = ["7","3","19","5"] 
list2 = ["3","15,"13","16"] 

Я хочу добавить эти числа вместе, чтобы получить еще четыре числа. Например, результат 7+3 и 3+15.

Мой выход в целом должен быть

["10","18","32","21"] 

Я попытался использовать для цикла, чтобы сделать это, однако, вместо того, чтобы 7+3 = 10 я 7+3 = 73. Я также попытался использовать метод int(), но получаю сообщение об ошибке.

+2

Так что ошибки вы получаете? Можете ли вы показать нам этот код? У вас есть строковые значения, поэтому '' 7 '+' 3'' действительно '' 73''; строки объединяются так же, как '' hello '+' world'' делает «привет мир». –

+0

Подсказка: используйте 'zip',' int' и 'str'. –

+0

вы объединяете строки. Вы должны использовать для int, если хотите выполнить арифметические операции с префиксами. – matcheek

ответ

0

Я думаю, что это делает то, что вы хотите. Сначала я конвертирую список в список целых чисел. Я застежка-молния их вместе и принимать каждую пару и суммировать их

[str(sum(c)) for c in zip(map(int, list1),map(int, list2))] 

используя сумму лучше, чем при использовании C [0] + с [1]

+1

Поскольку ожидаемый результат также является строкой, вы можете добавить вызов 'str()' там. Кроме того, почему бы не использовать назначение кортежа в цикле 'for'? 'для a, b в zip (list1, list2): res.append (str (int (a) + int (b))). –

+2

И вместо 'res = []' и 'res.append()', понимание списка будет более компактным, эффективным и читаемым. –

+0

@MartijnPieters Я использую сумму, а не доступ к кортежу, поэтому он может использовать 3 массива –

1

Ваша проблема заключается в том, что вы конкатенации строк.

Используя функцию map, вы получите желаемый int list [7,3,19,5] из исходного списка строк ["7","3","19","5"].

Тогда вы можете использовать zip для суммирования обоих массивов.

list1 = ["7","3","19","5"] 
list2 = ["3","15","13","16"] 
print [x+y for x,y in zip(map(int, list1), map(int, list2))] 
2

Прежде всего, у вас есть списки строк (не целые числа). "7" - это строка. Если вы добавите его в "3", вы получите "73". 7 - целое число.

Первое, что нужно было бы преобразовать ваши списки в целые числа. Вот один из способов сделать это и тот, который я буду использовать.

list1 = map(int, list1) 

Это просит питона вызвать int функцию на каждом элементе list1 в аргументе и присвоить возвращаемое значение обратно list1. Аналогично для list2. Как только это будет сделано, у вас есть два списка целых чисел, которые вы можете добавить.

Это можно сделать несколькими способами. Я бы сделал это так.

res = [] 
for l1, l2 in zip(list1, list2): 
    res.append(l1 + l2) 

zip функция будет «ЗИП» элементы нескольких списков в группы. Таким образом, ваши списки будут заархивированы в кортежи, такие как (7,3), (3, 15) и т. Д. Цикл с двойной переменной будет каждый раз распаковывать эти кортежи, чтобы вы получили l1 =7 и l2 =3 в первой итерации и так далее.

Подведите их и верните в список результатов.

Есть более сжатые способы сделать это, но это ясно. Если вам интересно, вот еще один.

[int(x1) + int(x2) for x1,x2 in zip(l1, l2)] 
1
list1 = ["7","3","19","5"] 
list2 = ["3","15","13","16"] 
print [str(x+y) for x,y in zip(map(int,list1),map(int,list2))] 
0

Итерационное решение (Python 2.x):

from operator import add 
from itertools import starmap, imap, izip, tee, chain 


def pairwise(seq): 
    a, b = tee(seq) 
    next(b, None) 
    return izip(a, b) 


list1 = ["7", "3", "19", "5"] 
list2 = ["3", "15", "13", "16"] 
print list(starmap(add, pairwise(imap(int, chain(list1, list2))))) 

Выход:

$ python foo.py 
[10, 22, 24, 8, 18, 28, 29] 
0

Функция, которая может быть использована для добавления любого количества списков.

list1 = ["7","3","19","5"] 
list2 = ["3","15","13","16"] 

def stradd(*args): 
    return [str(sum(map(int, x))) for x in zip(*args)] 

print stradd(list1, list2) 

[ '10', '18', '32', '21']

Смежные вопросы