2012-05-12 40 views

Trả lời

7

Nếu thứ tự là không quan trọng, bạn có thể sử dụng sets:

>>> main_array = ['bacon', 'cheese', 'milk', 'cake', 'tomato'] 
>>> second_array = ['cheese', 'tomato'] 
>>> set(main_array) & set(second_array) 
set(['tomato', 'cheese']) 

Ở đây chúng ta sử dụng toán tử giao nhau, &. Nên bạn chỉ muốn các mặt hàng không có trong danh sách thứ hai của bạn, chúng tôi có thể sử dụng sự khác biệt, -:

>>> set(main_array) - set(second_array) 
set(['cake', 'bacon', 'milk']) 
+0

Điều đó sẽ không hoạt động nếu lệnh được giữ. Nếu không, đây thực sự là giải pháp tốt nhất. Tuy nhiên, tôi nghĩ anh ấy muốn * loại bỏ * những yếu tố đó để sử dụng '-' thay vì' & '. – ThiefMaster

+1

@ThiefMaster - đúng, và không giải thích 'Tôi muốn tất cả các yếu tố' đúng! – fraxel

11
new_array = [x for x in main_array if x not in second_array] 

Tuy nhiên, đây không phải là rất performant cho các danh sách lớn. Bạn có thể tối ưu hóa bằng cách sử dụng một thiết lập cho second_array:

second_array = set(second_array) 
new_array = [x for x in main_array if x not in second_array] 

Nếu thứ tự của các mục không quan trọng, bạn có thể sử dụng một bộ cho cả hai mảng:

new_array = list(set(main_array) - set(second_array)) 
+0

Tôi thích python biểu cảm như thế nào :). Nó giống như bạn đang nói tiếng anh. – Vikas

+2

Câu trả lời hay, chỉ là một bổ sung nhỏ: bạn có thể tối ưu hóa biến thể bảo quản thứ tự bằng cách thay đổi 'second_array' thành một tập hợp đầu tiên: ' second_set = set (second_array); new_array = [x cho x trong main_array nếu x không phải trong second_set] ' – roskakori

2
main_array = set(['bacon', 'cheese', 'milk', 'cake', 'tomato']) 
second_array = (['cheese', 'tomato']) 

main_array.difference(second_array) 
>>> set(['bacon', 'cake', 'milk']) 

main_array.intersection(second_array) 
>>> set(['cheese', 'tomato']) 
0
l = [u'SQOOP', u'SOLR', u'SLIDER', u'SFTP', u'PIG', u'NODEMANAGER', u'JSQSH', u'HCAT', u'HBASE_REGIONSERVER', u'GANGLIA_MONITOR', u'FLUME_HANDLER', u'DATANODE', u'BIGSQL_WORKER'] 

p = [u'SQOOP', u'SOLR', u'SLIDER', u'SFTP'] 

l = [i for i in l if i not in [j for j in p]] 

print l 
[u'PIG', u'NODEMANAGER', u'JSQSH', u'HCAT', u'HBASE_REGIONSERVER', u'GANGLIA_MONITOR', u'FLUME_HANDLER', u'DATANODE', u'BIGSQL_WORKER'] 
Các vấn đề liên quan