Перейти к содержимому

Как убрать повторяющиеся символы в строке python

  • автор:

Способы удаления дубликатов из списка в Python

Способы удаления дубликатов из списка в Python

Удаление дубликатов списка достаточно простая задача. При этом, знание ее вариантов имеет большое практическое значение. И в сегодняшней статье мы рассмотрим варианты получения уникального списка элементов из исходной последовательности. И рассмотрим варианты реализации.

Наивный метод.

В наивном методе мы просто проходим по списку и добавляем первое вхождение элемента в новый список, игнорируя все остальные вхождения этого конкретного элемента.

# Код демонстрирует удаление дубликатов
# из списка наивным методом

# инициализация списка
my_list = [1, 3, 5, 6, 3, 5, 6, 1]
print («Оригинальный список : » + str(my_list))

# используем наивный метод
# чтобы убрать дубликаты
# из списка
li = []
for i in my_list:
if i not in li:
li.append(i)

# список после удаления дубликатов
print («список после удаления дубликатов : » + str(li))

Оригинальный список : [1, 3, 5, 6, 3, 5, 6, 1]
список после удаления дубликатов : [1, 3, 5, 6]

Использование генератора списков.

Данный метод аналогичен предыдущему, но использует запись в виде одной строки, с использованием генератора списков.

# Код демонстрирует удаление дубликатов
# из списка с помощью генератора списков

# инициализация списка
my_list = [1, 3, 5, 6, 3, 5, 6, 1]
print («Оригинальный список : » + str(my_list))

# используем генератор списка
# чтобы удалить дубликаты

li = []
[li.append(x) for x in my_list if x not in li]

# вывод списка после удаления элементов
print («Список после удаления дубликатов : » + str(li))

Оригинальный список : [1, 3, 5, 6, 3, 5, 6, 1]
список после удаления дубликатов : [1, 3, 5, 6]

Использование set().

Это самый популярный способ, с помощью которого дубликаты удаляются из списка. Но главным и заметным недостатком этого подхода является то, что в этом конкретном методе порядок элементов теряется.

# Код Python3 показывает как
# удалять дубликаты из списка методом set()

# инициализация списка
my_list = [1, 5, 3, 6, 3, 5, 6, 1]
print («Оригинальный список : » + str(my_list))

# используем set()
# чтобы удалить дубликаты из списка
my_list = list(set(my_list))

# вывод списка после удаления элементов
# не сохраняет порядок
print («Список после удаления дубликатов: » + str(my_list))

Оригинальный список : [1, 5, 3, 6, 3, 5, 6, 1]
Список после удаления дубликатов: [1, 3, 5, 6]

Генератор списка + enumarate().

Генератор списка в сочетании с функцией перечисления также может решить эту задачу. Он ищет уже существующие элементы и пропускает их добавление. Также сохраняет порядок списка.

# Код Python3 показывает как удалять дубликаты из списка
# используя генератор списков(list comprehension) + enumerate()

# инициализация списка
my_list = [1, 5, 3, 6, 3, 5, 6, 1]
print («Оригинальный список : » + str(my_list))

# используем list comprehension + enumerate()
# чтобы удалить дубликаты из списка

li = [i for n, i in enumerate(my_list) if i not in my_list[:n]]

# вывод списка после удаления элементов
print («Список после удаления дубликатов: » + str(li))

Оригинальный список : [1, 5, 3, 6, 3, 5, 6, 1]
Список после удаления дубликатов: [1, 5, 3, 6]

Модуль collections.OrderedDict.fromkeys().

Это самый быстрый метод для достижения конкретной задачи. Сначала он удаляет дубликаты и возвращает словарь, который необходимо преобразовать в список. Он также хорошо работает и в случае строк.

# Код Python3 показывает как удалять дубликаты из списка
# с помощью collections.OrderedDict.fromkeys()

from collections import OrderedDict

# инициализация списка
my_list = [1, 5, 3, 6, 3, 5, 6, 1]
print («Оригинальный список : » + str(my_list))

# используем модуль collections.OrderedDict.fromkeys()
# чтобы удалить дубликаты из списка

# вывод списка после удаления элементов
print («Список после удаления дубликатов: » + str(li))

Оригинальный список : [1, 5, 3, 6, 3, 5, 6, 1]
Список после удаления дубликатов: [1, 5, 3, 6]

Таким образом, для получения списка из уникальных элементов в Python, применимы все вышеуказанные методы. Но при этом встроенный модуль collections минимизирует скорость выполнения задачи.

Создано 21.09.2021 10:33:00

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 0 ):

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2024 Русаков Михаил Юрьевич. Все права защищены.

    Повторяющийся символы в строке в языке Python

    Что вы уже пробовали сделать и в чём у вас проблема? Задачка довольно простая, решается «в лоб» перебором символов строки в цикле, плюс один символ в промежуточной переменной хранится. Ну либо чуть хитрее через zip со сдвигом строки.

    20 июн 2022 в 9:39

    str_1 = input(«Введите строку:») count = 0 symb = » for el in str_1: if str_1.count(el) > count: count = str_1.count(el) symb = el print(el.replace(el, »))

    20 июн 2022 в 9:47
    Сейчас у меня что то такое)
    20 июн 2022 в 9:47

    Добавил ваш код в вопрос. Но не уверен про отступы. Не пишите код в комментариях, он там не форматируется нормально. В общем, это неправильный путь, просто попробуйте запоминать предыдущий символ и сравнивать с ним текущий. Потом либо печатайте символ либо не печатайте. Либо копите символы в строке или списке и выводите потом. Заменой строки лучше не пользоваться кроме случаев, когда вам надо какой-то символ совсем из строки удалить, у вас не тот случай.

    Задача 1. Символы. Напишите программу, которая удаляет из строки все повторяющиеся символы.

    Вы можете использовать эту функцию, чтобы удалить повторяющиеся символы из строки, как в примерах, которые вы привели:

    input_string = "hbh1od2jf1mmk45m5" 
    output_string = remove_duplicates(input_string)
    print(output_string) # hb1od2jfmk45

    input_string = "h7fy4rno 3"
    output_string = remove_duplicates(input_string)
    print(output_string) # h7fy4rno 3

    Можно записать данную функцию в 1 строку и результат будет такой же:

    def remove_duplicates(string): 
    return ''.join(sorted(set(string), key=string.index))

    Эта функция создает новую строку и добавляет каждый символ из исходной строки только в том случае, если он еще не был добавлен в новую строку. Таким образом, все повторяющиеся символы удаляются, а порядок символов в строке сохраняется.

    Такой программы не существует в силу законов мироздания
    def remove_duplicates(input_string):
    result = »
    for char in input_string:
    if char not in result:
    result += char
    return result

    # Пример 1
    input_string = ‘hbh1od2jf1mmk45m5’
    print(remove_duplicates(input_string))

    # Пример 2
    input_string = ‘h7fy4rno 3’
    print(remove_duplicates(input_string))

    Эта программа работает, проходя по каждому символу во входной строке и добавляя его в результирующую строку только в том случае, если он еще не присутствует в результирующей строке. Затем она возвращает результирующую строку. Вы можете заменить input_string на любую строку, которую вы хотите обработать.

    Удаление всех дубликатов символов из заданной строки в Python

    Нам дана строка символов, из которой нужно удалить все дубликаты. При этом порядок символов имеет значение. Каким будет результат?

    Input : geeksforgeeks Output : efgkos

    Совет: пожалуйста, попробуйте сначала решить эту задачу самостоятельно в своей IDE, а уж потом читать решение.

    from collections import OrderedDict def removeDupWithoutOrder(str): return "".join(set(str)) def removeDupWithOrder(str): return "".join(OrderedDict.fromkeys(str)) if __name__ == "__main__": str = "geeksforgeeks" print("Without Order =" , removeDupWithoutOrder(str)) print("With Order EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Without Order = egfkosr With Order = geksfor

    Что делают OrderedDict и fromkeys()?

    OrderedDict это словарь, который запоминает порядок вставки ключей. Если новое вхождение перезаписывает существующее вхождение, исходная позиция вставки остается неизменной.

    Обратите внимание на следующий отрывок кода:

    from collections import OrderedDict ordinary_dictionary = <> ordinary_dictionary['a'] = 1 ordinary_dictionary['b'] = 2 ordinary_dictionary['c'] = 3 ordinary_dictionary['d'] = 4 ordinary_dictionary['e'] = 5 # Output = print(ordinary_dictionary) ordered_dictionary = OrderedDict() ordered_dictionary['a'] = 1 ordered_dictionary['b'] = 2 ordered_dictionary['c'] = 3 ordered_dictionary['d'] = 4 ordered_dictionary['e'] = 5 # Output = print(ordered_dictionary)

    fromkeys() создает новый словарь и возвращает список ключей. Ключи для нового словаря берутся из seq, а значения — из value (если заданы). Синтаксис метода fromkeys() — fromkeys(seq[, value]).

    • seq: Это список значений, которые будут использоваться при подготовке ключей для словаря.
    • value: Опционально; если задать, значение будет установлено в качестве value.

    Способы удаления дубликатов из списка в Python

    Способы удаления дубликатов из списка в Python

    Удаление дубликатов списка достаточно простая задача. При этом, знание ее вариантов имеет большое практическое значение. И в сегодняшней статье мы рассмотрим варианты получения уникального списка элементов из исходной последовательности. И рассмотрим варианты реализации.

    Наивный метод.

    В наивном методе мы просто проходим по списку и добавляем первое вхождение элемента в новый список, игнорируя все остальные вхождения этого конкретного элемента.

    # Код демонстрирует удаление дубликатов
    # из списка наивным методом

    # инициализация списка
    my_list = [1, 3, 5, 6, 3, 5, 6, 1]
    print («Оригинальный список : » + str(my_list))

    # используем наивный метод
    # чтобы убрать дубликаты
    # из списка
    li = []
    for i in my_list:
    if i not in li:
    li.append(i)

    # список после удаления дубликатов
    print («список после удаления дубликатов : » + str(li))

    Оригинальный список : [1, 3, 5, 6, 3, 5, 6, 1]
    список после удаления дубликатов : [1, 3, 5, 6]

    Использование генератора списков.

    Данный метод аналогичен предыдущему, но использует запись в виде одной строки, с использованием генератора списков.

    # Код демонстрирует удаление дубликатов
    # из списка с помощью генератора списков

    # инициализация списка
    my_list = [1, 3, 5, 6, 3, 5, 6, 1]
    print («Оригинальный список : » + str(my_list))

    # используем генератор списка
    # чтобы удалить дубликаты

    li = []
    [li.append(x) for x in my_list if x not in li]

    # вывод списка после удаления элементов
    print («Список после удаления дубликатов : » + str(li))

    Оригинальный список : [1, 3, 5, 6, 3, 5, 6, 1]
    список после удаления дубликатов : [1, 3, 5, 6]

    Использование set().

    Это самый популярный способ, с помощью которого дубликаты удаляются из списка. Но главным и заметным недостатком этого подхода является то, что в этом конкретном методе порядок элементов теряется.

    # Код Python3 показывает как
    # удалять дубликаты из списка методом set()

    # инициализация списка
    my_list = [1, 5, 3, 6, 3, 5, 6, 1]
    print («Оригинальный список : » + str(my_list))

    # используем set()
    # чтобы удалить дубликаты из списка
    my_list = list(set(my_list))

    # вывод списка после удаления элементов
    # не сохраняет порядок
    print («Список после удаления дубликатов: » + str(my_list))

    Оригинальный список : [1, 5, 3, 6, 3, 5, 6, 1]
    Список после удаления дубликатов: [1, 3, 5, 6]

    Генератор списка + enumarate().

    Генератор списка в сочетании с функцией перечисления также может решить эту задачу. Он ищет уже существующие элементы и пропускает их добавление. Также сохраняет порядок списка.

    # Код Python3 показывает как удалять дубликаты из списка
    # используя генератор списков(list comprehension) + enumerate()

    # инициализация списка
    my_list = [1, 5, 3, 6, 3, 5, 6, 1]
    print («Оригинальный список : » + str(my_list))

    # используем list comprehension + enumerate()
    # чтобы удалить дубликаты из списка

    li = [i for n, i in enumerate(my_list) if i not in my_list[:n]]

    # вывод списка после удаления элементов
    print («Список после удаления дубликатов: » + str(li))

    Оригинальный список : [1, 5, 3, 6, 3, 5, 6, 1]
    Список после удаления дубликатов: [1, 5, 3, 6]

    Модуль collections.OrderedDict.fromkeys().

    Это самый быстрый метод для достижения конкретной задачи. Сначала он удаляет дубликаты и возвращает словарь, который необходимо преобразовать в список. Он также хорошо работает и в случае строк.

    # Код Python3 показывает как удалять дубликаты из списка
    # с помощью collections.OrderedDict.fromkeys()

    from collections import OrderedDict

    # инициализация списка
    my_list = [1, 5, 3, 6, 3, 5, 6, 1]
    print («Оригинальный список : » + str(my_list))

    # используем модуль collections.OrderedDict.fromkeys()
    # чтобы удалить дубликаты из списка

    # вывод списка после удаления элементов
    print («Список после удаления дубликатов: » + str(li))

    Оригинальный список : [1, 5, 3, 6, 3, 5, 6, 1]
    Список после удаления дубликатов: [1, 5, 3, 6]

    Таким образом, для получения списка из уникальных элементов в Python, применимы все вышеуказанные методы. Но при этом встроенный модуль collections минимизирует скорость выполнения задачи.

    Создано 21.09.2021 10:33:00

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 0 ):

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2024 Русаков Михаил Юрьевич. Все права защищены.

    Удаление всех дубликатов символов из заданной строки в Python

    Нам дана строка символов, из которой нужно удалить все дубликаты. При этом порядок символов имеет значение. Каким будет результат?

    Input : geeksforgeeks Output : efgkos

    Совет: пожалуйста, попробуйте сначала решить эту задачу самостоятельно в своей IDE, а уж потом читать решение.

    from collections import OrderedDict def removeDupWithoutOrder(str): return "".join(set(str)) def removeDupWithOrder(str): return "".join(OrderedDict.fromkeys(str)) if __name__ == "__main__": str = "geeksforgeeks" print("Without Order =" , removeDupWithoutOrder(str)) print("With Order EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Without Order = egfkosr With Order = geksfor

    Что делают OrderedDict и fromkeys()?

    OrderedDict это словарь, который запоминает порядок вставки ключей. Если новое вхождение перезаписывает существующее вхождение, исходная позиция вставки остается неизменной.

    Обратите внимание на следующий отрывок кода:

    from collections import OrderedDict ordinary_dictionary = <> ordinary_dictionary['a'] = 1 ordinary_dictionary['b'] = 2 ordinary_dictionary['c'] = 3 ordinary_dictionary['d'] = 4 ordinary_dictionary['e'] = 5 # Output = print(ordinary_dictionary) ordered_dictionary = OrderedDict() ordered_dictionary['a'] = 1 ordered_dictionary['b'] = 2 ordered_dictionary['c'] = 3 ordered_dictionary['d'] = 4 ordered_dictionary['e'] = 5 # Output = print(ordered_dictionary)

    fromkeys() создает новый словарь и возвращает список ключей. Ключи для нового словаря берутся из seq, а значения — из value (если заданы). Синтаксис метода fromkeys() — fromkeys(seq[, value]).

    • seq: Это список значений, которые будут использоваться при подготовке ключей для словаря.
    • value: Опционально; если задать, значение будет установлено в качестве value.

    Повторяющийся символы в строке в языке Python

    Что вы уже пробовали сделать и в чём у вас проблема? Задачка довольно простая, решается «в лоб» перебором символов строки в цикле, плюс один символ в промежуточной переменной хранится. Ну либо чуть хитрее через zip со сдвигом строки.

    20 июн 2022 в 9:39

    str_1 = input(«Введите строку:») count = 0 symb = » for el in str_1: if str_1.count(el) > count: count = str_1.count(el) symb = el print(el.replace(el, »))

    20 июн 2022 в 9:47
    Сейчас у меня что то такое)
    20 июн 2022 в 9:47

    Добавил ваш код в вопрос. Но не уверен про отступы. Не пишите код в комментариях, он там не форматируется нормально. В общем, это неправильный путь, просто попробуйте запоминать предыдущий символ и сравнивать с ним текущий. Потом либо печатайте символ либо не печатайте. Либо копите символы в строке или списке и выводите потом. Заменой строки лучше не пользоваться кроме случаев, когда вам надо какой-то символ совсем из строки удалить, у вас не тот случай.

    Удаление из строки повторяющихся символов

    Вводится строка. Требуется удалить из нее повторяющиеся символы и все пробелы. Например, если было введено «abc cde def», то должно быть выведено «abcdef».

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

    Извлекать каждый символ введенной строки. Если он не встречается в новой строке и не является пробелом, то добавлять его в конец новой строки.

    Pascal

     
    var
    s1,s2: string;
    c: char;
    i: byte;
    begin
    readln(s1);
    s2 := '';
    for i:=1 to length(s1) do begin
    c := s1[i];
    if (pos(c,s2) = 0) and (c <> ' ') then
    s2 := s2 + c
    end;
    writeln(s2);
    end.
     

    abc cde def
    abcdef

    Язык Си

     
    #include < string.h>
    main() char s[100], s_new[100];
    char c, i, j;
    gets(s);
    j = 0;
    for (i=0; i < strlen(s); i++) c = s[i];
    if (strchr(s_new,c) == NULL && c != ' ') s_new[j] = c;
    j += 1;
    >
    >
    s_new[j] = '\0';
    puts(s_new);
    >
     

    cpu gpu mb cooler
    cpugmboler

    Python

    удалить повторяющиеся символы в строке python

     
    # Вариант 1

    s = input()
    s_new = ''
    for i in range(len(s)):
    if s_new.find(s[i]) == -1 and s[i] != ' ':
    s_new += s[i]
    print(s_new)


    # Вариант 2

    s = input()
    s_new = ''

    for i in s:
    if i not in s_new and i != ' ':
    s_new += i

    print(s_new)

     

    a a b d c a c k l c d f
    abdcklf

    Basic-256

     
    input s$
    s_new$ = mid(s$,1,1)
    for i=2 to length(s$)
    a$ = mid(s$,i,1)
    if instr(s_new$,a$) = 0 and a$ <> " " then
    s_new$ = s_new$ + a$
    endif
    next i
    print s_new$

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

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