Нужно написать функцию, которая принимает список и возвращает новый список из неповторяющееся целых чисел. Язык Python

Нужно написать функцию, которая принимает на вход список целых чисел и возвращает новый список, содержащий только уникальные элементы из исходного списка. Это все что мне пришло в голову. Помогите пожалуйста

a = [2, 3, 4, 2, 4, 7]

def list_int(a):
    b= []
    r = 0
    for num in a:
        if num in a:
            a.remove(a[num])
        else:
            b.append(num)
    return b

Ответы (4 шт):

Автор решения: Collapse
    def unique_elements(input_list):
    unique_list = []
    for item in input_list:
        if item not in unique_list:
            unique_list.append(item)
    return unique_list

# Пример использования:
input_list = [1, 2, 3, 4, 2, 3, 5]
print(unique_elements(input_list))
→ Ссылка
Автор решения: Amgarak

Воспользуйтесь множеством set:

a = [2, 3, 4, 2, 4, 7]

def list_int(incoming_list):
    return list(set(incoming_list))

print(list_int(a))

Вывод:

[2, 3, 4, 7]


a = [2, 3, 4, 2, 4, 7]

def list_int(incoming_list):
    b = []
    for item in incoming_list:
        if incoming_list.count(item) == 1:
            b.append(item)
    return b

print(list_int(a))

Вывод:

[3, 7]

Однострочник (генератор списка):

def list_int(incoming_list):
    return [item for item in incoming_list if incoming_list.count(item) == 1]
→ Ссылка
Автор решения: Kamran Pulatov

Если вы просто хотите знать как все это устроено, то вот так:

a = [2, 3, 4, 2, 4, 7]

def remove_equal_elems(some_list: list) -> list:
  for item in some_list:
    if some_list.count(item) > 1:
      some_list.remove(item)
  return some_list

print(remove_equal_elems(a))

А если вам без разницы и просто нужен результат, то вам подойдет решение @Amgarak

Решение @Collapse тоже подходит и оно работает быстрее, но забивает память, так как создается новая переменная

→ Ссылка
Автор решения: Stanislav Volodarskiy

Не добавляйте в список элементы и не удаляйте из списка элементы, если этот список сейчас в заголовке цикла for ... in <список>:. Иногда это можно делать, но там много тонкостей. Пока вы учитесь, следуйте простому правилу: если в цикле хочется изменить список, создайте новый.

collections.Counter считает какие значения сколько раз входят в спискок. В вашем примере получится такой словарь: {2: 2, 4: 2, 3: 1, 7: 1}. В цикле остаются только значения с единичными счётчиками:

import collections

a = [2, 3, 4, 2, 4, 7]
print([v for v, c in collections.Counter(a).items() if c == 1])

Если вы боитесь генераторов то так:

a = [2, 3, 4, 2, 4, 7]
b = []
for v, c in collections.Counter(a).items():
    if c == 1:
        b.append(v)
print(b)

Если вы боитесь импортов и всё ещё боитесь генераторов, то так:

a = [2, 3, 4, 2, 4, 7]

d = {}
for v in a:
    d[v] = d.get(v, 0) + 1

b = []
for v, c in d.items():
    if c == 1:
        b.append(v)

print(b)
→ Ссылка