Как преобразовать строки в списке Python: tolower и toUpper
Быстрый ответ
Преобразовать список строк в нижний или верхний регистр можно всего одним выражением:
Нижний регистр:
lowercase_list = [s.lower() for s in my_list]
Верхний регистр:
uppercase_list = [s.upper() for s in my_list]
Вместо my_list
просто подставьте ваш исходный список строк.
Всё сразу: использование списочных включений и map
Рассмотрим, как применять списочные включения в Python, а также как сочетать функцию map()
с lambda
:
# Нижний регистр: использование map и lambda
lowercase_list_map = list(map(lambda s: s.lower(), my_list))
# Верхний регистр: использование map и метода str.upper
uppercase_list_map = list(map(str.upper, my_list))
В каждом из этих новых списков будут строки из исходного, приведённые к единому регистру. Исходные данные при этом останутся неизменными.
Не все яйца в одну корзину: разные ситуации требуют разных подходов
В зависимости от контекста может потребоваться разный подход. Вот несколько рекомендаций для различных случаев:
1. Map или списочные включения?
Использование функции Map даст вам преимущество ленивого вычисления, а списочные включения сразу сформируют весь список. Чем сложнее выражения и условия, тем более выгодно использовать списочные включения.
2. Исходный список остается нетронутым
Вы хотите сохранить исходный список в исходном виде? Создайте его копию, прежде чем менять элементы:
original_list = ["Python", "LiSt", "LoWEr", "CASE", "UPPER"]
copied_list = original_list[:]
uppercase_copied = [s.upper() for s in copied_list]
3. Большие данных и производительность
При работе с большими объемами данных важно учитывать затраты памяти и производительность. Более выгодными могут быть генераторы и функция map()
, поскольку они генерируют значения по мере необходимости:
# Генератор для экономии памяти
lowercase_generator = (s.lower() for s in my_list)
for word in lowercase_generator:
print(word)
Визуализация
Представьте себе мир строк:
Они выглядят так:
["Python", "LiSt", "LoWEr", "CASE", "UPPER"]
Применяя методы .lower()
или .upper()
в Python, мы приводим их к единому облику:
# Все строки станут нижнего регистра
[word.lower() for word in words]
# Все строки перейдут в верхний регистр
[word.upper() for word in words]
Таким образом, наш список превращается в гармоничный хор:
Коллекция в нижнем регистре: [👕, 👕, 👕, 👕, 👕]
Коллекция в верхнем регистре: [🎩, 🎩, 🎩, 🎩, 🎩]
Тонкости и подводные камни: обработка исключительных случаев
Рассмотрим, как обрабатывать непривычные, но важные ситуации:
Unicode строки и локализация
С Unicode строками, требующими особого подхода к приведению символов к нижнему регистру, могут понадобиться дополнительные шаги:
import unicodedata
# Правильное приведение Unicode строк к нижнему регистру
lowercase_unicode = [unicodedata.normalize('NFKD', s).encode('ASCII', 'ignore').decode().lower() for s in my_list]
Фильтрация нестроковых элементов
Если в списке есть не только строки, измените регистр только для строк:
# Меняем регистр только для строковых элементов, остальные не трогаем
uniform_case_list = [s.lower() if isinstance(s, str) else s for s in my_list]
Модификация списка на месте: рискованный манёвр
Если сохранение исходного списка не является приоритетом:
# Модификация исходного списка на месте, будьте осторожны
for i, s in enumerate(my_list):
if isinstance(s, str):
my_list[i] = s.lower()
Помните, что модификация на месте необратима и может привести к неожиданным последствиям.
Полезные материалы
- Built-in Types — Python 3.12.2 documentation for str.upper — документация к методу
str.upper()
. - Built-in Types — Python 3.12.2 documentation for str.lower — документация к методу
str.lower()
. - How do I lowercase a string in Python? – Stack Overflow — обсуждение решений на StackOverflow.
- Python String lower() Method – w3schools — гайд по методу
lower()
. - Strings and Character Data in Python – Real Python — полное руководство по работе со строками в Python.
- 5. Data Structures — Python 3.12.2 documentation — официальное руководство по списочным включениям.
- Tutorial | DigitalOcean — практическое руководство по преобразованию регистра списка строк.