2015-05-06 6 views
2

У меня есть два довольно длинных списка, и я знаю, что все элементы более коротких содержатся в дольше, но мне нужно изолировать элементы в более длинном списке, которые не находятся в короче, так что я могу удалить их отдельно из словаря, из которого я получил более длинный список. То, что я до сих пор:Мне нужно сделать два списка одинаковыми

for e in range(len(lst_ck)): 
    if lst_ck[e] not in lst_rk: 
     del currs[lst_ck[e]] 
     del lst_ck[e] 

lst_ck является длинный список и lst_rk является короче, currs это словарь, из которого пришел lst_ck. Если это помогает, они оба являются списками трехзначных ключей из словарей.

ответ

4

Используйте наборы, чтобы найти разницу:

l1 = [1,2,3,4] 

l2 = [1,2,3,4,6,7,8] 

print(set(l2).difference(l1)) 
set([6, 7, 8]) # in l2 but not in l1 

Затем удалить элементы.

diff = set(l2).difference(l1): 
your_list[:] = [ele for ele in your_list of ele not in diff] 

Если списки очень большие, вы можете предпочесть выражение генератора:

your_list[:] = (ele for ele in your_list of ele not in diff) 
2

Если вы не заботитесь о нескольких вхождений одного и того же элемента, используйте set.

diff = set(lst_ck) - set(lst_rk) 

Если вы заботитесь, попробуйте следующее:

diff = [e for e in lst_rk if e not in lst_ck] 
+0

Это должно быть наоборот, вы должны вычесть небольшой список из большой. –

+0

Неплохо, я неправильно читаю короткие/длинные имена. – GHugo