Я пытаюсь использовать список понимания, чтобы выполнить следующее. Я хочу создать новый список (уникальный), который имеет только общие номера из обоих списков.
unique = []
for listcomp in range(len(list1)):
if list1[listcomp] in list2 and list1[listcomp] not in unique:
unique.append(list1[listcomp])
else:
continue
Выше работает нормально, но когда я создаю понимание списка ниже, я получаю дубликаты, если в list1 есть повторяющиеся числа. то есть list1 = [1, 1, 2], list2 = [1, 5]. Я создал свой список понимания как
unique = [list1[listcomp] for listcomp in range(len(list1)) if list1[listcomp] in list2 and list1[listcomp] not in unique]
Если я получаю дубликаты, я предполагаю, что оператор "и" не применяется? Я читал другие вопросы о продвижении оператора if вверх по заявлению о понимании, но это не сработало. Можете ли вы использовать AND, чтобы продлить ваши условия?
Большое спасибо
Мой полный код: -
import random as rnd
# Randomly generate the size of your list
list1size = rnd.randint(1,20)
list2size = rnd.randint(1,20)
# Declare your list variables
list1 = []
list2 = []
# Fill your lists with randomly generated numbers upto the listsize generated above
for x in range(list1size):
list1.append(rnd.randint(1,15))
for y in range(list2size):
list2.append(rnd.randint(1,15))
# Not required but easier to read lists once sorted
list1.sort()
list2.sort()
print(list1)
print(list2)
# Now to compare old school
unique = []
# for listcomp in range(len(list1)):
# if list1[listcomp] in list2 and list1[listcomp] not in unique:
# unique.append(list1[listcomp])
# else:
# continue
# Now to compare with list comprehension
unique = [list1[listcomp] for listcomp in range(len(list1)) if list1[listcomp] in list2 and list1[listcomp] not in unique]
# Above doesn't stop duplicates if they are in List1 so I assume you can't use AND
print(f"The common numbers in both lists are {unique}")