2013-01-11 31 views

Trả lời

11

danh sách nối chỉ được thực hiện với các nhà điều hành +.

nên

total = [] 
for i in [['a','b','c'],['d','e','f']]: 
    total += i 

print total 
+0

Đây là giải pháp tốt nhất, vì nó là đơn giản nhất. +1. Tuy nhiên, bạn có thể chỉ cần thực hiện: 'new_list = old_list1 + old_list2'. Của bạn cũng làm như vậy, nhưng bạn không cần phải đặt chúng lại với nhau trong một danh sách các danh sách đầu tiên. –

+0

Vâng, tôi chỉ muốn nó hoạt động cho một danh sách tùy ý. Tôi đã học được rằng bạn có thể làm một cái gì đó như 'sum ([], [list1, list2, list3])', và vì sum gọi toán tử +, mà cho '[]' là phép nối, nó sẽ nối tất cả chúng với nhau cho bạn. – will

3

Điều này sẽ làm:

a = [['a','b','c'],['d','e','f']] 
reduce(lambda x,y:x+y,a) 
+0

TẠI SAO ?! điều này là hoàn toàn trên đầu, tại sao không chỉ làm 'a = [['a', 'b', 'c'], ['d', 'e', ​​'f']]' 'a [0] + a [1] ' – will

+0

Điều đó có hiệu quả nếu danh sách là' [['a', 'b', 'c'], ['d', 'e', ​​'f'], ['d', 'e ',' f ']]? – Sibi

+0

rõ ràng là không, nhưng đó không phải là câu hỏi là gì, và nếu bạn muốn nó làm việc cho các bộ danh sách dài tùy ý, thì [câu trả lời của tôi] (http://stackoverflow.com/a/14278710/432913) hoạt động và là nhiều hơn nữa đọc được – will

2

Hãy thử:

sum([['a','b','c'], ['d','e','f']], []) 

Hoặc kéo dài hơn nhưng nhanh hơn:

[i for l in [['a', 'b', 'c'], ['d', 'e', 'f']] for i in l] 

Hoặc sử dụng itertools.chain như @AshwiniChaudhary gợi ý:

list(itertools.chain(*[['a', 'b', 'c'], ['d', 'e', 'f']])) 
+4

'sum()' không nên được sử dụng cho những thứ như vậy. Như [docs] (http://docs.python.org/2/library/functions.html#sum) nói: ** Để ghép nối một chuỗi các vòng lặp, hãy xem xét sử dụng itertools.chain(). ** –

0
mergedlist = list_letters[0] + list_letters[1] 

này giả sử bạn có một danh sách dài tĩnh và bạn luôn muốn kết hợp lần đầu tiên hai

>>> list_letters=[['a','b'],['c','d']] 
>>> list_letters[0]+list_letters[1] 
['a', 'b', 'c', 'd'] 
9

Sử dụng danh sách hiểu:

ar = [['a','b','c'],['d','e','f']] 
concat_list = [j for i in ar for j in i] 
+0

Đây là cách nhanh nhất, fwiw. Xét về chu kỳ CPU. –

+1

Hoàn toàn là cách tốt nhất, vì nó là nhỏ gọn nhất. Nhưng làm thế nào nó hoạt động? –

1

Thử phương pháp "mở rộng" của đối tượng danh sách:

>>> res = [] 
>>> for list_to_extend in range(0, 10), range(10, 20): 
     res.extend(list_to_extend) 
>>> res 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 

Hoặc ngắn:

>>> res = [] 
>>> map(res.extend, ([1, 2, 3], [4, 5, 6])) 
>>> res 
[1, 2, 3, 4, 5, 6] 
Các vấn đề liên quan