Создание массива из другого определенного массива без дубликатов, используя понимание списка - PullRequest
3 голосов
/ 16 апреля 2020

Я пытался создать список, свободный от дубликатов из другого определенного списка, используя понимание списка следующим образом:

num = [1, 2, 2, 2, 3, 3, 4, 4, 4, 5]
my_list = []
my_list = [x for x in num if x not in my_list]

При вызове my_list я получаю тот же массив

[1, 2, 2, 2, 3, 3, 4, 4, 4, 5]

Может ли кто-нибудь любезно объяснить, почему это происходит?

Ответы [ 4 ]

3 голосов
/ 16 апреля 2020

my_list не обновляется до тех пор, пока не будет завершено понимание. Во время понимания my_list - пустой список.

Если порядок имеет значение, подход, который вы хотите использовать:

num = [1, 2, 2, 2, 3, 3, 4, 4, 4, 5]
my_list = []
check_set = set()
for x in num:
    if x not in check_set:
        my_list.append(x)
        check_set.add(x)

Если порядок не имеет значения:

my_list = list(set(num))
3 голосов
/ 16 апреля 2020

Использование set более выполнимо, чем условие if, а также для l oop:

num = [1, 2, 2, 2, 3, 3, 4, 4, 4, 5]
my_list = list(set(num))
print(my_list)

Выход:

[1, 2, 3, 4, 5]
2 голосов
/ 16 апреля 2020

Вы можете попробовать это понимание списка .

my_list=[]
num = [1, 2, 2, 2, 3, 3, 4, 4, 4, 5]
my_list=[my_list.append(x) or x for x in num if x not in my_list]
# [1,2,3,4,5]

Если вас не волнует заказ.

my_lst=list(set(num))

С Python3 .6 и выше словари хранят порядок вставки или использовать collections.OrderedDict. Итак, вы можете попробовать это.

num = [1, 2, 2, 2, 3, 3, 4, 4, 4, 5]
my_list=list(dict.fromkeys(num).keys())

Вы можете использовать набор seen для отслеживания видимых элементов. Если элемент в seen не добавляет его в my_list.

num = [1, 2, 2, 2, 3, 3, 4, 4, 4, 5]
seen=set()
my_list=[]
for x in num:
    if x not in seen:
        seen.add(x)
        my_list.append(x)
my_list
# [1,2,3,4,5]
2 голосов
/ 16 апреля 2020

вы должны попробовать что-то вроде этого:

In [99]: num = [1, 2, 2, 2, 3, 3, 4, 4, 4, 5]
    ...: my_list = []

In [100]: [my_list.append(item) for item in num if item not in my_list]
Out[100]: [None, None, None, None, None]

In [101]: my_list
Out[101]: [1, 2, 3, 4, 5]

Список обновляется после завершения процесса понимания списка, поскольку дубликаты все еще присутствуют.

...