#python #python-3.x #list
#python #python-3.x #Список
Вопрос:
Мне нужно удалить «дубликаты» из этого списка:
[[4, 1], [1, 4], [0, 5], [5, 0]]
Например: [4, 1] [1, 4]
являются одним и тем же объектом, и мне нужно удалить один из них.
Как мне это сделать без использования инструментов понимания списка?
Комментарии:
1. У вас всегда есть 2 элемента в подсписке?
2. Почему «без использования инструментов понимания списка»?
3. какой из них сохранить в случае дублирования.?
4. @AkshayNevrekar. Да, всегда.
5. @SreeramTP не имеет значения.
Ответ №1:
Один из методов — отсортировать его и добавить, если его нет в окончательном списке, как указано LogicalBranch в ответах.
Вы упомянули, что не можете использовать sort
и всегда есть 2
элементы в списке. Затем вы можете выполнить простой трюк, создав другой список, обратный списку, и сравнив его в окончательном ответе. Смотрите коды ниже
ans = []
l = [[4, 1], [1, 4], [0, 5], [5, 0]]
for x in l:
a = x[::-1]
if x not in ans and a not in ans:
ans.append(x)
print(ans) # [[4, 1], [0, 5]]
Ответ №2:
Судя по комментариям, вы не хотите использовать list comprehension
, sort
и у вас всегда есть 2 элемента в подсписке, тогда следующий подход поможет,
Он выполняет итерацию по списку и переворачивает подсписок и проверяет, присутствуют ли они в new_list
x = [[4, 1], [1, 4], [0, 5], [5, 0]]
new_list = []
for i in x:
if i[::-1] not in new_list and i not in new_list:
new_list.append(i)
print(new_list)
Вывод:
[[4, 1], [0, 5]]
Ответ №3:
Самый простой способ добиться этого (без импорта чего-либо) — отсортировать каждую пару в списке, прежде чем добавлять ее в новый список результатов, вот так:
result = []
for pair in [[4, 1], [1, 4], [0, 5], [5, 0]]:
pair.sort()
if pair not in result:
result.append(pair)
print(result)
Вы могли бы даже преобразовать это в функцию:
def list_filter(collection):
result = []
for pair in collection:
pair.sort()
if pair not in result:
result.append(pair)
return result
Который вы затем использовали бы следующим образом:
list_filter([[4, 1], [1, 4], [0, 5], [5, 0]])
Который должен возвращать список, который выглядит следующим образом:
[[1, 4], [0, 5]]
Вы могли бы сделать это еще меньше, используя:
list_filter = lambda collection: list(set([sorted(x) for x in collection]))
Который должен возвращать тот же результат.
РЕДАКТИРОВАТЬ: обновленный метод без сортировки:
(result, collection) = ([], [[4, 1], [1, 4], [0, 5], [5, 0]])
def check(n1, n2):
for pair in collection:
if n1 in pair and n2 in pair and sorted(pair) in collection:
return True
return False
for pair in collection:
pair.sort()
if pair not in result:
result.append(pair)
print(result)
Вы могли бы даже преобразовать это в функцию:
def new_filter_function(collection):
result = []
def check(n1, n2):
for pair in collection:
if n1 in pair and n2 in pair and ([n1, n2] in collection or [n2, n1] in collection):
return True
return False
for pair in collection:
if pair not in result:
result.append(pair)
return result
Который вы затем использовали бы следующим образом:
new_filter_function([[4, 1], [1, 4], [0, 5], [5, 0]])
Который также должен возвращать список, который выглядит следующим образом:
[[1, 4], [0, 5]]
Удачи.
Комментарии:
1. Мне не разрешено использовать сортировку
2. Можете ли вы использовать dict или collections.?
3. @SreeramTP Нет, я могу использовать другой список и каким-то образом добавить туда новые «уникальные» подсписки