Я хочу класифікувати список рядків у Python залежно від того, чи є вони великими, малими або змішаними
Як я можу це зробити?
Відповіді:
Існує ряд методів "є" для рядків. islower()і isupper()має відповідати вашим потребам:
>>> 'hello'.islower()
True
>>> [m for m in dir(str) if m.startswith('is')]
['isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper']
Ось приклад того, як використовувати ці методи для класифікації списку рядків:
>>> words = ['The', 'quick', 'BROWN', 'Fox', 'jumped', 'OVER', 'the', 'Lazy', 'DOG']
>>> [word for word in words if word.islower()]
['quick', 'jumped', 'the']
>>> [word for word in words if word.isupper()]
['BROWN', 'OVER', 'DOG']
>>> [word for word in words if not word.islower() and not word.isupper()]
['The', 'Fox', 'Lazy']
Я хочу вигукнути про використання reмодуля для цього. Особливо у випадку чутливості до регістру.
Ми використовуємо опцію re.IGNORECASE під час складання регулярного виразу для використання у виробничих середовищах з великими обсягами даних.
>>> import re
>>> m = ['isalnum','isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'ISALNUM', 'ISALPHA', 'ISDIGIT', 'ISLOWER', 'ISSPACE', 'ISTITLE', 'ISUPPER']
>>>
>>>
>>> pattern = re.compile('is')
>>>
>>> [word for word in m if pattern.match(word)]
['isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper']
Однак намагайтеся завжди використовувати inоператор для порівняння рядків, як описано в цій публікації
швидша операція-повторне збіг-або-вул
Також детально описано в одній з найкращих книг, з якої слід почати вивчати python