Python

Питон не могу понять код

Объясните пожалуйста эти строчки кода питон, прочитайте их, пожалуйста
Slavik Muradyan
Slavik Muradyan
69
Подсчитываются:
  • Кол-во строк в файле.
  • Кол-во слов в файле, состоящих только из букв.
  • Кол-во алфавитно-цифровых символов в файле.

w.isalpha() возвращает True, если строка w состоит только из букв.
i.split() возвращает список из подстрок строки i, разбитых пробелами, табуляциями и переводами строки.
w for w in ... if ... возвращает элементы списка, удовлетворяющие условию, в виде итератора.
Всё это обёртывается в квадратные скобки, чтобы материализовать список из итератора.
len() возвращает длину списка, т.е. кол-во элементов в нём.
Реализовано, надо сказать, неэффективно: материализация списка не нужна, кол-во слов можно было посчитать по итератору вот такой конструкцией:
 words += sum(1 for w in i.split() if w.isalpha()) 

s.isalnum() возвращает True, если строка s состоит только из алфавитно-цифровых символов (т.е. букв и цифр).
s for s in i if ... возвращает символы из строки i, удовлетворяющие условию, в виде итератора.
И дальше опять материализуется список и вычисляется его длина. Что, опять же, можно сделать проще и эффективнее:
 symbols += sum(1 for s in i if s.isalnum()) 

Да и сам файл построчно читать необязательно. Если файл маленький, то читаем целиком:
 data = list(file) 
И обрабатываем.
 lines = len(data)
words = sum(1 for w in i.split() if w.isalpha() for i in data)
symbols = sum(1 for s in i if s.isalnum() for i in data)

А если файл большой, то блоками фиксированного размера читать эффективнее, чем построчно.
Олег Голдин
Олег Голдин
54 053
Лучший ответ
Учит пхп нахер тебе этот питон сдался
Вадим Карманов
Вадим Карманов
74 968