Удалить одинаковое количество одинаковых элементов двух списков python
Не могу понять одну вещь, у меня есть два списка:
my_list2 = [1261, 1168, 768, 1261, 1550, 1160, 692, 1485, 224, 1117, 90, 1058, 1006, 72, 1273, 1307, 1164, 1164, 196, 326, 1544]
my_list = [397, 1379, 1393, 287, 114, 1051, 1120, 471, 223, 1273, 1262, 1031, 480, 1154, 1195, 946, 1281, 98, 1563, 1096, 1551, 1168, 1117, 360, 768, 1107, 1558, 1393, 287, 942, 745, 918, 1283, 692, 198, 600, 1072, 1539, 1544, 480, 1214, 781, 1546, 98, 231, 1563, 984, 1483, 1551, 1055, 340, 1229, 1491, 1469, 354, 1107, 739, 172, 1123, 828, 1371, 1393, 287, 745, 940, 857, 124, 385, 198, 1072, 1261, 1541, 1550, 862, 1362, 1078, 1031, 1506, 1407, 1479, 1565, 402, 1214, 1281, 239, 1042, 98, 231, 1563, 1551, 1355, 1160, 1361, 315, 229, 1055, 196, 1191, 356, 1562, 956, 638, 1300, 1107, 1232, 739, 699, 90, 871, 1123, 1223, 619, 1072, 1544, 1214, 520, 1535, 1567, 1563, 1151, 304, 1551, 229, 164, 196, 1469, 354, 768, 1296, 1232, 1510, 1559, 1481, 639, 940, 1051, 198, 1312, 1262, 1301, 1031, 1544, 480, 98, 1563, 1551, 1355, 1469, 360, 213, 1559, 397, 172, 692, 1072, 1544, 480, 1479, 1317, 565, 1563, 1551, 1160, 1173, 1092, 1296, 1232, 871, 1573, 1510, 746, 649, 1572, 942, 745, 940, 124, 600, 1072, 1031, 1506, 1144, 1544, 480, 1571, 1220, 562, 1317, 80, 1025, 770, 655, 1563, 1096, 1485, 1551, 1168, 1055, 956, 638, 176, 1435, 1296, 90, 649, 918, 1051, 1223, 1072, 550, 224, 1539, 1031, 1195, 1214, 610, 877, 1099, 770, 1563, 304, 1551, 1355, 1117, 1087, 354, 956, 1296, 90, 397, 1058, 1393, 649, 692, 385, 619, 1072, 1258, 1093, 1006, 1031, 1571, 1214, 1025, 1546, 770, 1563, 72, 340, 1468, 85, 1573, 1123, 828, 1371, 287, 942, 940, 1318, 857, 114, 1051, 1283, 385, 1072, 1312, 227, 1242, 1506, 1214, 1281, 610, 1545, 1563, 1096, 426, 1485, 938, 1536, 1361, 229, 196, 768, 739, 90, 871, 1573, 1512, 1123, 649, 287, 745, 1086, 330, 1051, 1549, 1258, 1273, 235, 1506, 480, 946, 1183, 770, 1535, 1563, 1485, 1470, 1562, 638, 101, 1246, 1393, 940, 1185, 619, 1072, 1120, 866, 480, 1214, 1307, 655, 1567, 1248, 819, 938, 1504, 229, 1055, 1164, 828, 1379, 1393, 287, 942, 1277, 918, 1051, 692, 802, 385, 1258, 1031, 1317, 610, 1546, 421, 1042, 655, 1535, 1412, 231, 938, 1361, 1504, 229, 196, 326, 1469, 1562, 768, 90, 1123, 743, 287, 940, 224, 1544, 1160, 1361, 1504, 196, 878, 1562, 768, 150]
Мне необходимо удалить столько элементов массиве my_list сколько их в my_list2 Я пробовал делать следующее:
for i in my_list:
if i in my_list2:
my_list.remove(i)
break
for k in my_list:
if k == 692:
print(k)
Но я все также получаю 4 элемента 692, но, исходя из условия, их должно быть 3, т.е. на один меньше, т.к. в my_list2 такой элемент один. Также я пробовал:
li = list(set(my_list) - set(my_list2))
for k in li:
if k == 692:
print(k)
Также безуспешно...
Ответы (2 шт):
Вам нужно пройтись циклом по my_list2, поскольку там и находятся все элементы, которые нужно удалить. Берем элемент my_list2, если он входит в большой список, то удаляем его из большого списка.
for j in my_list2:
if j in my_list:
my_list.remove(j)
print(my_list.count(692)) # возвращает 3
@Mango подсказал еще один способ - списковое включение:
[my_list.remove(i) for i in my_list2 if i in my_list]
Не нужно его никуда передавать, просто после объявления списков вставить эту строчку
for b in my_list2:
if b in my_list:
my_list.remove(b)
for k in my_list:
if k == 692:
print(k)
перебор всех елементов my_list можно было не делать