Задача на Python "Уникальные элементы"
Дан список. Выведите те его элементы, которые встречаются в списке только один раз. Элементы нужно выводить в том порядке, в котором они встречаются в списке. В данной задаче запрещено пользоваться всеми операциями над списками (find, count, index и так далее).
Входные данные
Вводится список целых чисел. Все числа списка находятся на одной строке.
Выходные данные
Выведите ответ на задачу. Не могу решить, вот мой код,но он проходит не все тесты:
a = input().split()
for i in range(len(a)):
c=a[0:i]+a[i+1:-1]
if a[i] not in c:
print(a[i])
Ответы (6 шт):
Сделал через словарь. Прохожусь по каждому элементу списка и прибавляю его счётчик внутри словаря. В Python 3.6 и выше словарь сохраняет элементы словаря в том же порядке в котором вы туда их добавляете. Т.е. мы добавляем элементы в словарь в порядке, таком же, как и в начальном списке. Идея делать через срезы и проверку через in плохая, так как это сильно повлияет на производительность.
a = list(map(int, input().split()))
cnt = {}
for el in a:
if el not in cnt:
cnt[el] = 1
else:
cnt[el] += 1
for el in cnt:
if cnt[el] == 1:
print(el)
нашел вот такое решение,но если честно я его не понял
a = [int(q) for q in input().split()]
for i in range(len(a)):
for j in range(len(a)):
if i != j and a[i] == a[j]:
break
else:
print(a[i], end=' ')
судя по всему ваш код не проходит тесты из=за этой строки:
c=a[0:i]+a[i+1:-1]
# ^^----!
уберите -1, должно работать
c=a[:i] + a[i+1:]
По другому сделал: сравниваю каждый с каждым, и если количество "несовпадений" равно "количеству элементов" -1 (это чтобы исключить сравнение с самим собой), то добавляю его в список.
a = [int(i) for i in input().split()]
b = []
k = 0
for i in range (0, len(a)):
for j in range (0, len(a)):
if a[i] != a[j]:
k += 1
if k == len(a) - 1:
b.append(a[i])
k = 0
print(' '.join(str(i) for i in b))
Прохожусь по элементам списка: если находятся два элемента списка (т.е., индексы не равны), и эти элементы равны, то поиск прекращается, переходим к следующему элементу.
До этого момента проверяемый элемент
попадает в список b столько раз,
сколько он оказывался не равен
остальным элементам списка, плюс ещë
когда равен сам себе (если индексы i
и j равны, то это один элемент).
Если по истечении второго цикла длина
списка b равна длине списка a, то это
значит, что проверяемый элемент не
равен никакому другому элементу
списка а, кроме себя. Следовательно, он является уникальным элементом, заносим его в список с.
После проверки список b нужно обнулить,
чтобы следующая проверка была
корректной.
В конце выводим элементы
списка с, т.е. уникальные элементы.
a = list(map(int, input().split()))
b = []
c = []
for i in range (len(a)):
for j in range (len(a)):
if i!=j and a[i]==a[j]:
break
else:
b.append(a[i])
if len(b) == len(a):
c.append(a[i])
b=[]
print(' '.join(list(map(str,c))))
A=input().split()
M=0
for i in range(len(A)):
if A[i] not in A[:i] and A[i] not in A[:(i-len(A)):-1]:
print(A[i])
Мой вариант