Мы можем использовать временный массив, чтобы проверить, присутствует ли каждый элемент a
в b
или нет. Этот размер этого массива должен быть больше максимального элемента, который может присутствовать в обоих списках (я искал, что максимальный размер списка Python в 32-битной системе равен 536,870,912, поэтому этот метод будет работать в обычных случаях). В этом временном списке temp_b
будет каждый элемент равным нулю. Теперь, для всех целых чисел, присутствующих в списке b, мы инициализируем значение в этом индексе равным 1, указывая, что этот элемент присутствует в b. После этого все, что нам нужно сделать, это: для каждого элемента i
в a
, проверьте, temp_b[i] == 1
? Если да, то элемент присутствует, иначе нет.
Обратите внимание, что для проверки того, соответствует ли частота каждого элемента в a
также в b
, мы должны будем изменить этот код. Сложность будет линейной по размеру массива.
a = [2, 5, 4, 7, 6, 8, 9]
b = [1, 3, 6, 7, 4, 3, 0]
temp_b = [0]*20
for i in b:
temp_b[i] = 1
#to check whether each element of a is present in b or not
for i in a:
if temp_b[i] == 1:
#element is present
print "present"
else:
#element is not present
print "not present"
Редактировать: Этот метод будет работать только для целых положительных чисел.
Спасибо. Я ценю ваше решение, но я не могу преобразовать списки в группы. Мне нужно работать только с списками –
@KshitijSaraogi: Почему вы не можете использовать наборы? Вы используете _really_ старую версию Python? Если вы не можете использовать наборы, то ваш застрял с алгоритмом O (n^2) ... если вы не реализуете свою собственную хеш-таблицу, которая будет медленно работать на скорости Python вместо скорости C, которую вы получаете от использования Python задавать. –
@ PM2Ring Я работаю со списками некоторых объектов, и я хочу использовать списки в нескольких других местах. Более того, я лично не предпочитаю литье типа для операции. –