Nếu bạn chỉ muốn có một thử nghiệm, tham gia các mục tiêu liệt kê thành một chuỗi và kiểm tra từng phần tử của bad
như sau:
>>> my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456', 'def-111', 'qwe-111']
>>> bad = ['abc', 'def']
>>> [e for e in bad if e in '\n'.join(my_list)]
['abc', 'def']
Từ câu hỏi của bạn, bạn có thể kiểm tra từng yếu tố như là một chuỗi tiểu so với mỗi phần tử của người khác theo cách này:
>>> [i for e in bad for i in my_list if e in i]
['abc-123', 'abc-456', 'def-456', 'def-111']
Đó là nhanh chóng (so với một trong những phương pháp khác):
>>> def f1():
... [item for item in my_list if any(x in item for x in bad)]
...
>>> def f2():
... [i for e in bad for i in my_list if e in i]
...
>>> timeit.Timer(f1).timeit()
5.062238931655884
>>> timeit.Timer(f2).timeit()
1.35371994972229
Từ nhận xét của bạn, đây là cách bạn có được những yếu tố không phù hợp:
>>> set(my_list)-{i for e in bad for i in my_list if e in i}
{'ghi-789', 'qwe-111'}
Wh tại chính xác bạn đã thử và những gì không hoạt động? – msvalkon
Mã hiện tại của bạn trông như thế nào? – Mizipzor