2014-01-24 3 views
2

Как вы добавляете каждый элемент одного списка в каждый список другого списка?добавить список значений в список подписок

a = [['a','b','c'],['d','e','f'],['g','h','i']] 
b = [1,2,3] 

Результат должен быть:

[['a','b','c',1],['d','e','f',2],['g','h','i',3]] 

Имейте в виду, что я хочу сделать это в очень большой список, так что эффективность и скорость важна.

Я пробовал:

for sublist,value in a,b: 
    sublist.append(value) 

возвращает «ValueError: слишком много значений для распаковки»

Возможно ListIndex или ListIterator может работать, но не знает, как применить здесь

ответ

4
a = [['a','b','c'],['d','e','f'],['g','h','i']]    
b = [1,2,3] 

for ele_a, ele_b in zip(a, b): 
    ele_a.append(ele_b) 

Результат:

>>> a 
[['a', 'b', 'c', 1], ['d', 'e', 'f', 2], ['g', 'h', 'i', 3]] 

Причина ваше оригинальное решение не работает, то, что a,b действительно создает tuple, но не то, что вы хотите ,

>>> z = a,b 
>>> type(z) 
<type 'tuple'> 
>>> z 
([['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']], [1, 2, 3]) 
>>> len(z[0]) 
3 
>>> for ele in z: 
... print ele 
... 
[['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']] #In your original code, you are 
[1, 2, 3]           #unpacking a list of 3 elements 
                #into two values, hence the 
                #'ValueError: too many values to unpack' 

>>> zip(a,b) # using zip gives you what you want. 
[(['a', 'b', 'c'], 1), (['d', 'e', 'f'], 2), (['g', 'h', 'i'], 3)] 
0

Один из вариантов, используя список понимание:

a = [(a[i] + b[i]) for i in range(len(a))] 
+0

Это заменит 'Ā' с новым список, содержащий новые списки. Конечный результат будет таким же в этом случае, но было бы несколько неэффективно создавать кучу новых списков. – kojiro

0

Просто петля через суб списки, добавление одного элемента за один раз:

for i in range(0,len(listA)): 
     listA.append(listB[i]) 
+0

Вместо использования 'range', рассмотрите возможность использования' enumerate (listA) 'здесь. 'для i, el_a в перечислении (a): el_a.append (b [i])' Я думаю, это то, что вы имели в виду. – kojiro

0

Вы можете сделать:

>>> a = [['a','b','c'],['d','e','f'],['g','h','i']] 
>>> b = [1,2,3] 
>>> [l1+[l2] for l1, l2 in zip(a,b)] 
[['a', 'b', 'c', 1], ['d', 'e', 'f', 2], ['g', 'h', 'i', 3]] 

Вы можете также злоупотребляют побочный эффект списковых, чтобы это было сделано на месте:

>>> [l1.append(l2) for l1, l2 in zip(a,b)] 
[None, None, None] 
>>> a 
[['a', 'b', 'c', 1], ['d', 'e', 'f', 2], ['g', 'h', 'i', 3]] 
Смежные вопросы