Объясните пятую строку,у меня все работает ,но я просто пытаюсь точнее понять код

Код проверяет палиндромы,но это не важно,в целом я понимаю как он работает ,но мне просто интересно как работает 5 строка

Объясните ,я буду рад и счастлив на всю жизнь)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))0


Ответы (3 шт):

Автор решения: CrazyElf
  1. Внешние скобки там лишние
  2. Читайте про str.join
  3. Читайте про генераторные выражения

Всё, больше там ничего нет.

→ Ссылка
Автор решения: Oopss
text=''.join(i for i in text if not i in c)

Эквивалентно коду


text='asdf'

c=(',','?','{')
ss=() #Промежуточная переменная
for i in text:
    if not i in c:
        ss+=(i,)# Добавить в кортеж, в оригинале это generator object
        print(ss)
text=''.join(ss)
print(text)

('a',)
('a', 's')
('a', 's', 'd')
('a', 's', 'd', 'f')
asdf
→ Ссылка
Автор решения: MarianD

Эта команда просто убирает из текста «запрещенные» символы, которые находятся в кортежи c.

Подробнее:

  1. (... for i in text ...)

    Когда вы проходите через строку text, вы постепенно получаете ее отдельные символы.

  2. (i for i in text ...)

    Вы хотите те же символы получить в генераторе списка...

  3. (i for i in text if i not in c)

    ... но только тогда, когда такой символ не находится в списке c.

Таким образом, вы из строки в переменной text создали генератор отдельных символов этой строки, но не всех, а только тех, которые не находятся в списке «запрещенных» символов c.

Как теперь использовать этот генератор, чтобы обратно получили из его отдельных символов комплектную строку?

Для этого в Питоне метод .join() - он из вашего генератора создает строку, в которой будут находиться все символы, отделенные между собой тем, что стоит перед точкой в .join().

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

".join(i for i in text if i not in c)
→ Ссылка