Создайте список понимания в python

#python #python-3.x #list

#python #python-3.x #Список

Вопрос:

 from random import seed
from random import randint

print("How long list 1 do you want:")
long1 = int(input())
print("How long list 2 do you want:")
long2 = int(input())

print("in range 1-100","Generating 2 random list...", sep="n")
list1 = [randint(1,100) for i in range(long1)]
list2 = [randint(1,100) for i in range(long2)]
print("List 1:",list1,"List 2:",list2, sep = "n")
list = list1   list2
unique=[]
for num in list:
    if num not in unique:
        unique.append(num)
print(f"Get unique number({len(unique)}) :", unique, sep="n") 
 

Выше приведен полный код, который я уже определил уникальным, но я хочу упростить цикл

 for num in list:
    if num not in unique:
        unique.append(num)
 

Я попробую сделать такой код:

 unique=[num for num in list if num not in unique]
 

но это выдает мне сообщение об ошибке

Обратная трассировка (последний последний вызов): файл «», строка 21, в файле «», строка 21, в ошибке имени: имя «уникальное» не определено

Комментарии:

1. если вам нужно однострочное решение unique.extend(list(set(unique)-set(list))) , но вы используете понимание списка таким образом, что unique продолжайте изменять каждый раз, каждый раз будет отображаться ошибка

2. Как вы думаете, что вы определили unique ?

3. Первый код работает не идеально; он выдает ту же ошибку (если не в той же строке). Может быть, вы забыли включить что-то в свой пост?

4. Разве вы не можете просто сделать unique = list(set(x)) . Вам не нужно понимание списка.

5. Я не знаю, что такое функция «set», но я собираюсь ее изучить, я новичок в этом, а также спасибо за ответ

Ответ №1:

Вы не можете использовать понимание списка для создания списка, который вы пытаетесь использовать в качестве ссылки. В расширенном коде, который вы устанавливаете unique = [] перед входом в свой цикл, so unique существует, и вы можете добавлять к нему значения, находясь в цикле. Вы не можете сделать это в понимании списка. Вы не можете получить доступ к промежуточному списку, пока вы его понимаете. (Ha… Я думаю, что я только что придумал этот язык. 🙂

Если вам нужен уникальный набор элементов списка, вы можете использовать другую встроенную конструкцию, называемую a set . Это дает вам уникальный набор элементов списка, но они почти наверняка будут переупорядочены. Что-то вроде этого:

 list3 = list(set(list1   list2))
 

list1 list2 объединяет два списка, сохраняя точный порядок. Это set() делает элементы уникальными (т. Е. Удаляет дубликаты), но при этом теряет первоначальный порядок. Вам нужно было бы сделать что-то более умное, чтобы сохранить первоначальный порядок.

Кроме того, вы не должны использовать переменную с именем list , поскольку это собственный тип Python, например int , tuple , и т.д.

Комментарии:

1. о, я вижу, спасибо, братан, но есть ли какое-либо решение для создания цикла из 1 строки кода?

2. Если вас не волнует порядок, вы можете сказать list3 = list(set(list1 list2)) . Я добавил это к своему ответу выше.

3. Раньше я не знал о функции «set», очень легко получить не повторяющийся номер, лол, теперь я чувствую себя глупо задавать такие вопросы, все равно спасибо 🙂