Python

Подсчет количества не повторяющихся элементов

Нужно написать код, который считет количество не повторяющихся элементов в списке
Без использования: методов, функций, словарей, множеств, in и not in.
Хочу понять как это можно сделать
Jahongir To'htaboyev
Jahongir To'htaboyev
108
Когда-то делал это как раз "без использования: методов, функций, словарей, множеств, in и not in."
Но на Javascript
var a = [5,8,4,3,9,5,1,6,3,5,2,8,7,4,5,3,0,5,6,6];
console.log(a);
var b = [];
for (var i = 0; i < a.length; i++) {
for (var j = 0; j < a.length; j++) {
if (i == j) {
continue;
}
if (a[i]==a[j]) {
b.push(a[i]);
var n = a[i];
}
for (var k = 0; k < a.length; k++) {
if (a[k] == n) {
a.splice(k, 1);
}
};
};
};
console.log('не повторяются ' + a);
console.log('повторяются ' + b);
____
5,8,4,3,9,5,1,6,3,5,2,8,7,4,5,3,0,5,6,6
не повторяются 9,1,2,7,0
повторяются 5,8,3,6,4
Erbol )))))))))))
Erbol )))))))))))
68 238
Лучший ответ
А, ну это тупо двойным циклом, перегонять уникальные элементы в другой список, с постоянным сканированием второго для проверки на наличие элемета. Очень глупо и неэффективно.
Вариант номер 2 - сортируем исходный список и сканируем его, увеличивая счетчик если новый элемент не равен предыдущему.
Baur Rap
Baur Rap
70 318
from time import time
from random import seed, randint
seed(0)
for N in [1000, 2_000, 4_000]:
~~~~print('N =', N)
~~~~A = [randint(0,1000_0) for _ in range(N)]

~~~~#Нормально
~~~~stt = time()
~~~~print(len(set(A)))
~~~~print(time()-stt);print()

~~~~#Бег в мешках
~~~~stt = time()
~~~~B = []
~~~~for a in A:
~~~~~~~~if not a in B:
~~~~~~~~~~~~B.append(a)
~~~~print(len(B))
~~~~print(time()-stt);print()

~~~~#Бег в мешках со связанными руками
~~~~stt = time()
~~~~B = []
~~~~for i in range(len(A)):
~~~~~~~~for j in range(len(B)):
~~~~~~~~~~~~if A[i]==B[j]:
~~~~~~~~~~~~~~~~break
~~~~~~~~else:
~~~~~~~~~~~~B.append(A[i])

~~~~print(len(B))
~~~~print(time()-stt);print('-------------------')

=============================================
Результат работы
==================
N = 1000
948
0.004000663757324219

948
0.017502307891845703

948
0.1295166015625
-------------------
N = 2000
1820
0.004500389099121094

1820
0.05250692367553711

1820
0.5040640830993652
-------------------
N = 4000
3324
0.0050008296966552734

3324
0.2040259838104248

3324
1.708216667175293
-------------------
>>>

PS
Перечитал вопрос, и закрались сомнения в том, что я правильно понял задачу.
Перечитал дополнение, и еще более запутался в понимании.
Ваня Носов
Ваня Носов
21 729
Ваня Носов PS 1
Перечитал вопрос, и закрались сомнения в том, что я правильно понял задачу.
Перечитал дополнение, и еще более запутался в понимании.