Как сравнить каждый элемент списка с каждым python
Перейти к содержимому

Как сравнить каждый элемент списка с каждым python

  • автор:

Проверить уникальность элементов списка

В списке чисел проверить, все ли элементы являются уникальными, то есть встречается ли каждое число только один раз.

Решение задачи на языке программирования Python

Решить данную задачу на языке Python можно несколькими способами. Классический вариант — брать по очереди элементы списка и сравнить каждый со стоящими за ним. При первом же совпадении элементов делается вывод, что в списке есть одинаковы элементы и работа программы завершается.

Еще одним способом решения может быть использование типа данных «множества» ( set ). Как известно, в множествах не может быть одинаковых элементов. При преобразовании списка во множество в нем одинаковые элементы будут представлены единожды, то есть дубли удалятся. Если после этого сравнить длину исходного списка и множества, то станет ясно, есть ли в списке одинаковые элементы. Если длины совпадают, значит все элементы списка уникальны. Если нет, значит, были одинаковые элементы.

Допустим, исходный список генерируется таким кодом:

from random import random N = 10 arr = [0] * N for i in range(N): arr[i] = int(random() * 50) print(arr) 

Пример решения классическим способом:

for i in range(N-1): for j in range(i+1, N): if arr[i] == arr[j]: print("Есть одинаковые") quit() print("Все элементы уникальны") 

Здесь j принимает значения от следующего элемента за тем, для которого ищется совпадение, до последнего в списке. Сравнивать элемент с индексом i с элементами, стоящими впереди него, не надо, т. к. эти сравнения уже выполнялись на предыдущих итерациях внешнего цикла.

Решение задачи с помощью множества:

setarr = set(arr) if len(arr) == len(setarr): print("Все элементы уникальны") else: print("Есть одинаковые") 

Функция set преобразует список во множество.

Примеры выполнения кода:

[2, 4, 1, 2, 45, 38, 26, 11, 49, 25] Есть одинаковые
[44, 49, 21, 19, 23, 27, 34, 9, 41, 31] Все элементы уникальны

В Python у списков есть метод count , который подсчитывает количество элементов списка, чьи значения совпадают с переданным в метод значением. Таким образом мы можем решить задачу, перебирая элементы списка и передавая каждый в метод count(item) . Если хотя бы однажны метод вернет число больше 1, значит в списке имеются повторы значений.

from random import randrange N = 10 arr = [randrange(50) for i in range(N)] print(*arr) for item in arr: if arr.count(item) > 1: print("Есть одинаковые") break else: print("Все элементы уникальны") 

В программе выше ветка else цикла for срабатывает только в случае, если работа цикла не была прервана с помощью оператора break .

В более сложном варианте данной задачи может требоваться определить неуникальные элементы, то есть выявить значения, которые встречаются в списке более одного раза, а не просто сказать, есть повторы или нет. Здесь мы не можем использовать прерывание цикла, так как в списке может повторяться и другое значение. Также не можем для всех элементов списка вызывать count() , так как в этом случае метод будет вызываться повторно для уже учтенных ранее значений. Например, результат работы такой программы

from random import randrange N = 10 arr = [randrange(50) for i in range(N)] print(*arr) for item in arr: count = arr.count(item) if count > 1: print(f"Элемент item> встречается count> раз") 

может выглядеть так:

9 36 43 21 48 6 19 13 3 48 Элемент 48 встречается 2 раз Элемент 48 встречается 2 раз

Чтобы исключить из перебора повторы значений, мы можем преобразовать список во множество. После этого перебирать в цикле элементы множества, которые уникальны.

from random import randrange N = 10 arr = [randrange(50) for i in range(N)] print(*arr) setarr = set(arr) for item in setarr: count = arr.count(item) if count > 1: print(f"Элемент item> встречается count> раз") 

X Скрыть Наверх

Решение задач на Python

Сравнить каждого элемента списка с каждым элементом другого списка

Author24 — интернет-сервис помощи студентам

Здравствуйте!
Задача состоит в следующем:
Даны два списка, они могут быть не равны по количеству элементов. Необходимо сравнить каждый элемент первого списка с каждым элементом второго списка, если он удовлетворяет условию, то идти дальше к следующему элементу списка, если нет, то нужно остановиться и достать индексы элементов двух списков.

х1 = [1;2;3;2;2;4;4] х2 = [3;2.5;4;4.5;3.5;2.5;5;5]

Теперь берем первый элемент в списке х1 и проверяем меньше он или равен каждому элементу в списке х2:
1 1 1 1 1 1 1 1

Берем следующий элемент в списке х1, сравниваем. и так далее

Если попадается элемент больше чем в списке х1:

То нужно остановиться и узнать индексы чисел, которые не удовлетворяют условию: 3 (индекс 2) и 2.5 (индекс 1) в списках х1 и х2 соответственно. Так как по условию дальше могут встречаться такие же значения. Вывод -: х1 -номер индекса/число, х2-номер индекса/число.
После получения индексов нужно вернутся к сравнению со следующего числа в списке х1 — 2( индекс 3), и так провести сравнение до конца списка х1. И показать все несоответствия. Порядок важен, на выходе несоответствия должны быть по порядку появления.

Ответ к примеру должен получиться таким, что бы можно было продолжить вычисления с полученными значениями:
1) х1.1 — (2) 3
х2.1 -(1) 2.5

2) х1.2 — (5) 4
х2.2 -(0) 3

3) х1.3 -(6)4
х2.3 -(0) 3

Как сравнить все элементы списка друг с другом?

Программа должна вывести a и are, т.к. a является подстрокой are (are начинается с a) Вопрос: Как в цикле пройтись по КАЖДОМУ элементу списка? Например текущий со следующим можно сравнить с помощью цикла

for i in range(len(spisok)): if spisok[i].startsith(spisok[i+1]): . 

Но как сравнить ВСЕ элементы друг с другом?

Отслеживать

68.2k 225 225 золотых знаков 80 80 серебряных знаков 223 223 бронзовых знака

Как сравнить поиндексово значения двух списков?

Как правильно сравнить попарно элементы двух списков? Например, берем по 0 индексу элементы первого и второго списка. Это 23 и 11. Сравниваем их на то, который эл. меньше и выносим в отдельный список. Потом по индексу 1 (56, 89), тоже выносим в отдельный список. Так что бы у нас появился третий список с значениями
list3 = [11, 56,33,45]

  • Вопрос задан более трёх лет назад
  • 12488 просмотров

Комментировать
Решения вопроса 1
Сергей Горностаев @sergey-gornostaev Куратор тега Python
Седой и строгий
result = [min(p) for p in zip(list1, list2)]
или
result = list(map(min, zip(l1, l2)))
Ответ написан более трёх лет назад
Комментировать
Нравится 6 Комментировать
Ответы на вопрос 1

Сергей, ваш ответ верен, но вы действительно думаете, что человеку с начальным уровнем знаний нужен именно ОПТИМАЛЬНЫЙ по объему кода и используемым функциям ответ? Мне кажется, что он сейчас на уровне изучения базы — циклы, перебор и тп. И правильнее будет такой вариант:

list1 = [23, 56, 78, 69] list2 = [11, 89, 33, 45] list3 = [] # создаем заранее пустой список для результата for i in range(len(list1)): #перебираем элементы списка (в пределах длины первого списка) if list1[i] < list2[i]: #сравниваем элементы первого списка с элементами второго списка list3.append(list1[i]) #добавляем в пустой список элемент из первого, если он меньше else: list3.append(list2[i]) #иначе - добавляем элемент из второго списка print (list3) #выводим итоговый список

Ответ написан более трёх лет назад
Нравится 8 3 комментария

Vaindante

Лучше сразу приобщаться к нормальному виду чем учиться на говнокоде.
который упадет если длина list1 будет больше чем длина list2

Про проверку длины списков - согласен, но был вопрос был не об этом (кстати, по условию длина списков равна). На каждом уровне - своя сложность решения вопроса и давать ответ, который человек скорее всего не поймет (вы уверены, что он уже знает, что такое map и zip?) не совсем верно. Уверен, что спросившему важнее понимание решения, чем просто факт, что такое решение есть и вот оно.

ну да, в четвертом классе тоже можно сразу объяснять, что в комплексных числах возможны отрицательные числа при извлечении квадратного корня, а в геометрии Лобачевского сумма углов треугольника больше 180 градусов и параллельные прямые пересекаются в бесконечности, это же правильно.
Ну да ладно, прекратим этот спор

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *