2013-04-04 21 views
12

Tôi khá mới với Python .. Tôi đang cố gắng viết một hàm sẽ hợp nhất các giá trị duy nhất trong các danh sách riêng biệt thành một danh sách. Tôi tiếp tục nhận được kết quả của một bộ danh sách. Cuối cùng tôi muốn có một danh sách các giá trị duy nhất từ ​​ba danh sách của tôi -a, b, c. Bất cứ ai có thể cho tôi một bàn tay với điều này?Hàm Python 3.3 để hợp nhất các giá trị duy nhất tạo thành nhiều danh sách thành một danh sách

def merge(*lists): 
    newlist = lists[:] 
    for x in lists: 
     if x not in newlist: 
      newlist.extend(x) 
    return newlist 

a = [1,2,3,4] 
b = [3,4,5,6] 
c = [5,6,7,8] 

print(merge(a,b,c)) 

Tôi nhận được một tuple của Lists

([1, 2, 3, 4], [3, 4, 5, 6], [5, 6, 7, 8]) 
+3

Thụt lề là quan trọng! – squiguy

Trả lời

16

Bạn chỉ có thể cần bộ:

>>> a = [1,2,3,4] 
>>> b = [3,4,5,6] 
>>> c = [5,6,7,8] 
>>> 
>>> uniques = set(a + b + c) 
>>> uniques 
set([1, 2, 3, 4, 5, 6, 7, 8]) 
>>> 
3

Nếu bạn không quan tâm đến họ là theo thứ tự ban đầu, dễ nhất và có khả năng nhịn ăn là sử dụng các chức năng đã đặt:

>>> set().union(a, b, c) 
{1, 2, 3, 4, 5, 6, 7, 8} 

Nếu bạn làm quan tâm đến thứ tự ban đầu (bộ xảy ra để giữ nguyên trong trường hợp này, nhưng không được đảm bảo), thì bạn có thể sửa nỗ lực ban đầu của mình bằng cách nhận ra đối số lists chứa một bộ gồm tất cả danh sách bạn thông qua tại Điều này có nghĩa rằng iterating trên nó giúp bạn từng đến những danh sách cùng một lúc, chứ không phải là các yếu tố trong đó - bạn có thể khắc phục điều này bằng cách sử dụng các itertools module:.

for x in itertools.chain.from_iterable(lists): 
    if x not in newlist: 
     newlist.append(x) 

Ngoài ra, bạn sẽ muốn newlist để bắt đầu dưới dạng danh sách trống thay vì bản sao của danh sách đầu vào.

+0

+1 để sử dụng union thay vì thêm các danh sách vào trước. Điều này có nghĩa là bạn có thể sử dụng các vòng lặp khác thay vì chỉ danh sách. – daboross

+0

Lưu ý rằng tùy thuộc vào số lượng giá trị duy nhất thời gian để kiểm tra 'x không có trong danh sách mới' sẽ tăng cho mỗi lần lặp lại. –

0
def merge(*lists): 
    newlist = [] 
    for i in lists: 
      newlist.extend(i) 
    return newlist 

merge_list = merge(a,b,c,d) 

merge_list = set(merge_list) 

merge_list = list(merge_list) 

print(merge_list)