Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 117

Сортировка с выбором повторов

29.07.2019, 13:14. Показов 3637. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите почему так странно работает?
Задача перебрать числа и вывести те которые повторяются.
Дело вот в чем, я так понял в моем цикле идет перебор индексов, а не элементов. НО при этом он выдает элементы, при том что правильно, но только до 10ов. Т.е. вот такое переберет правильно 4 8 0 3 4 2 0 3 а вот такое выдаст #2 12 22 2 12 2 22 12 10 только 2. Я не понимаю почему так.
Понял только если я пишу for i in range(len(a)): перебор идет индексов, а если пишу for i in a: идет перебор символов, но тогда выводит все повторяющиеся. Не вот так:
4 8 0 3 4 2 0 3 = 0 3 4
а вот так 0 0 3 3 4 4
Честно не понимаю как решить. Хотел бы спросить ответ НО спрошу только совета, алгоритма, решение готовое не нужно. Помогите)))


Python
1
2
3
4
5
a =[int(i) for i in input().split()]
a.sort()
for i in range(len(a)):
    if a.count(i) > 1:
        print(i, end = ' ')
Добавлено через 1 час 20 минут
Вообщем я крутил вертел и теперь у меня получилось вот такое извращенное решение которое работает со всеми примерами, но некоторые компилятор вместе с ответом выдают ошибку)) Не подскажете что он так ругается на строку условий?
Python
1
2
3
4
5
6
7
a =[int(i) for i in input().split()]
a.sort()
old = 99999
for i in range(len(a)):
    if (a[i]==a[i+1]) and (a[i]!=old):
        old = a[i]
        print(old, end = ' ')
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.07.2019, 13:14
Ответы с готовыми решениями:

Сортировка выбором
Решил сам написать сортировку выбором, но что-то работает неправильно в чем ошибка ? a = minimum = a index_of_min = 0 for i in...

Сортировка выбором по убыванию и по возрастанию
Айбат и Айрат играют в игру. Изначально на асфальте написано n целых чисел a1, a2, a3… Каждый ход один из ребят выбирает одно число и...

Функция поиска минимума + сортировка выбором
Ничего не выводит, в чём ошибка ? def find_min(arr): minimum = arr index_of_min = 0 for i in range(1, len(arr)): ...

14
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
29.07.2019, 13:40
Цитата Сообщение от ---DEMON--- Посмотреть сообщение
Т.е. вот такое переберет правильно 4 8 0 3 4 2 0 3 а вот такое выдаст #2 12 22 2 12 2 22 12 10 только 2.
Это вообще о чём? Что перебираем? Что конкретно непонятно, что не отслеживается дебагом?
Кстати,
Цитата Сообщение от ---DEMON--- Посмотреть сообщение
for i in range(len(a)):
if a.count(i)
эта конструкция ужасно неэффективна. Очевидно, в count есть ещё один полный проход по массиву или что там у вас.
0
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 117
29.07.2019, 15:25  [ТС]
dondublon,
По порядку, обучающий курс застрял на задаче, решение в интернете смотреть не хочу (зачем тогда изучать) в рамках проеденного материала была дана задача(где то середина курса тема "списки"). Для входных данных приводятся примерные данные одни из которых я написал выше. Этот пример сортируется отлично 4 8 0 3 4 2 0 3 ответ правильный, но система не принимала код(проверяет по различным тестам, но что не так было не понятно) со временем я дошел до такого теста где получилось так что десятки не сортируются, а значения до 10и сортируются нормально.
http://www.pythontutor.com/live.html#mode=edit
в дебагере прослеживается что при этой конструкций перебираются не числа списка, а индексы (вроде как или я что то не понимаю)эта конструкция перебирает числа от 0 до 10.
Python
1
2
for i in range(len(a)):
    if a.count(i) > 1:
и при этой конструкций ответ вот этого 2 12 22 2 12 2 22 12 10 равен 10, а должен быть 2 12 22
с этой конструкцией я не понимаю почему так работает? почему все числа которые дисятки 22 66 88 и другие пролетают как будь то их нет

если я пишу так, то перебор идет по нужным значениям 2 12 22 2 12 2 22 12 10, но в ответ получаю вывод всех повторяющихся элементов сколько повторений столько выводов тут ответ получается 2 2 12 12 12 22 22.
Python
1
2
for i in a:
    if a.count(i) > 1:
А в этой конструкций я просто не знаю как добавить условие для нормального отбраковывания повторов((
Даже не уверен что вы мне подскажите, как подсказать что бы не решить данный банальный пример((

Добавлено через 1 минуту
А при последней конструкций выдается везде нормально только компилятор ругается на строку
Python
1
if (a[i]==a[i+1]) and (a[i]!=old):
Добавлено через 1 минуту
с выводом IndexError: list index out of range и там вообще что то много повторных проходов

Добавлено через 36 минут
Мне кажется что проще у вас уже попросить решение, потому что я что то ни как не могу додумать что не так и как решить.
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
29.07.2019, 15:36
---DEMON---, ужас. Учитесь писать грамотно, и вас, может быть, поймут.
Не вникая в ваши решения, самый простой путь - с помощью collections.Counter.
1
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
29.07.2019, 15:39
в один проход через словарь можно
Python
1
2
3
4
5
6
7
8
>>> l = [1,2,1,2,3,5,4,5,6,5]
>>> d = {}
>>> for i in l:
    d.setdefault(i,0)
    d[i] += 1
    
>>> {i:d[i] for i in d if d[i] >1}
{1: 2, 2: 2, 5: 3}
1
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 117
29.07.2019, 15:45  [ТС]
dondublon, Может да а может, нет. Только более простой способ я бы нашел в интернете. Только смысл был что бы решить тем что есть, а не то что будет. То что вы предлагаете такого не было.

vic5710, Этого тоже не было. Но ладно мне уже эта задача надоела так что путь будет так. Спасибо)
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
29.07.2019, 15:55
Цитата Сообщение от ---DEMON--- Посмотреть сообщение
Только смысл был что бы решить тем что есть, а не то что будет. То что вы предлагаете такого не было.
Что значит "будет"? Counter там уже есть и был ранее.
Вам русский язык не родной, что ли?
1
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 117
29.07.2019, 20:23  [ТС]
Я понимаю что вы шипко умный, но насколько я понял
collections это я понял вид словаря который изучается где то дальше, Counter да это счетчик, он используется почти сразу.
На основах изучается логика алгоритмов и понятие как пользоваться базовыми функциями. а collections это лазейка упрощение. Так что русский мой родной язык. И еще в данном случае не правильный вывод для меня мне нужен строгий вывод только элементов и ВСЕ. Возможно можно изменить, но это уже другая история.....
Counter({1: 5, 2: 3})

Я все подробно объяснил, если вы не поняли....
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,701
Записей в блоге: 14
30.07.2019, 15:48
---DEMON---, полностью согласен с dondublon: твои мысли представляют собой кашу... Неужели трудно сформулировать задачу: дан список с повторениями, построить из него список без повторений. Задача элементарная. Решается "на раз" даже без продвинутых премудростей Питона:

https://ideone.com/888tdD:

Python
1
2
3
4
5
6
7
8
9
def setOf(a):
    r=[a[0]]
    for x in a[1:]:
        if not (x in r):
            r+=[x]
    return r
    
z=setOf([1,2,3,1,2,3,11,11,22,22])
print(z)
1
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 117
30.07.2019, 15:58  [ТС]
Catstail, Это все понятно, что решается на раз. Только вот пока в начале что то изучаешь на раз как то не всегда получается, не все так мыслят.
А что касается понятности разве вторая строчка моего первого сообщения Задача перебрать числа и вывести те которые повторяются. не передает тот же смысл что и ваша только ваша формулировка написана более грамотно.
И первый мой вопрос был почему мой версий работают не так, а если бы изначально стояла задача решить поставленную задачу, то я бы просто скопировал текст из курса.
И да вы решили способом которого в курсе еще не было, в интернете я находил несколько вариантов, только мне надо было самым топорным циклами, тоже просто только я не понял, а потом дошло)))
Ладно спасибо и на этом, новое тоже хорошо)
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,701
Записей в блоге: 14
30.07.2019, 16:18
---DEMON---, и чего же из моего решения еще не было в курсе?
0
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 117
30.07.2019, 20:05  [ТС]
Catstail, set идет в разделе словарей. А сейчас идут строки. Честно не знаю, так построен курс или так всегда идет по сложности или еще по какой то идеологий лекторов, не знаю..
Но вы то этого не знали и не могли знать) Что тут у меня и когда, я не уточнял что используем только счетчик и цикл, но просил только поправить) Тут многие(в курсе) так решали с помощью словаря setdefault, ollections.Counter, set (я так раньше учился лишь бы решить, результат так себе, теперь решил по другому сделать) просто я решил так курс не проходить "решить любыми средствами" решил послушать лекторов и решать тем что они предоставляют "как будь то гугла нет " но получилось не очень с этой задачей, а до этого получалось)

Добавлено через 3 минуты
А вот можете подсказать, выше пользователь vic5710 приводил пример со словарем, я что то не нашел в интернете как поменять вывод с данным словарем. Как то можно выводить только числа? Без дописок как сейчас?
0
 Аватар для Semen-Semenich
5224 / 3471 / 1173
Регистрация: 21.03.2016
Сообщений: 8,298
30.07.2019, 20:33
Лучший ответ Сообщение было отмечено ---DEMON--- как решение

Решение

---DEMON---, вы просто не понимаете что делает функция range.
допустим у вас список состоит из этих цифр
Python
1
a = [4,8,0,3,4,2,0,3]
теперь глянем что вернет range для этого списка
Python
1
2
>>> range(len(a))
range(0, 8)
то есть диапазон от 0 до len(a) которое равно 8, которые вы получаете для i в цикле.
в итоге в i принимает следущие значения
Python
1
2
>>> list(range(len(a)))
[0, 1, 2, 3, 4, 5, 6, 7]
и если посмотреть ваше условие
Python
1
if a.count(i) > 1:
мы видим что часть чисел есть в списке а и более одного раза. поэтому у вас почти работает для этого списка но если взять другие при той же длине
Python
1
2
3
4
>>> a = [12,22,12,22,12,10,11,11]
>>> list(range(len(a)))
[0, 1, 2, 3, 4, 5, 6, 7]
>>>
как видно ни одного совпадения. если вам еще не известны словари то можно решить это срезами
Python
1
2
3
4
5
6
a =[int(i) for i in input().split()]
list_occur = []
for i in range(len(a)):
    if a[i] in a[i+1:] and a[i] not in list_occur:
        print(a[i], end = ' ')
        list_occur.append(a[i])
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,701
Записей в блоге: 14
30.07.2019, 20:59
---DEMON---, и где у меня set? setOf - это название функции. Оно может быть любым... Каша...
0
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 117
30.07.2019, 21:14  [ТС]
Semen-Semenich, Большое спасибо, теперь понятно и да это все было. Я просто не понял как все это обернуть(
Catstail, Да каша. Ну что поделаешь потом приберу)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.07.2019, 21:14
Помогаю со студенческими работами здесь

Сортировка выбором, Сортировка простыми вставками, Сортировка пузырьком, Сортировка слиянием, Быстрая сортировка Хоара
Имеется список товаров, хранящихся на базе. Каждая строка этого списка содержит: инвентарный номер товара; количество видов этого товара;...

Сортировка массива каждым из 3 способов (пузырьковая сортировка, сортировка выбором, сортировка вставкой)
1. Напишите программу, которая выполняет следующие функции: • заполнение элементов массива вещественными числами с заданной ...

Сортировка выбором
array = for i in range(len(array)): # проходим по всему массиву idx_min = i # сохраняем индекс предположительно минимального...

Создать алгоритм в виде блок-схемы линейным выбором с обменом (сортировка выбором): 1. Найти наименьший (наибо
Создать алгоритм в виде блок-схемы при помощи линейный выбора с обменом (сортировка выбором): 1. Найти наименьший (наибольший) элемент,...

Сортировка одномерного массива разными методами: методом пузырька, сортировка выбором, сортировка включением
Составить программу, реализующую сортировки одномерного массива разными методами: методом пузырька, сортировки выбором, сортировка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru