Строковые массивы Python: от списков до специализированных структур

Раздел: Работа со строками -> Строки

Массив строк в Python: основные подходы

Список строк (list of strings) - это основной и самый эффективный способ представления массива строк в Python. Списки поддерживают все необходимые операции: добавление, удаление, сортировку, поиск, преобразование. Они работают быстро и гибко. Пример создания и обработки такого массива:


# Создание списка строк
fruits = ['apple', 'banana', 'cherry', 'date']
print(fruits)
print(fruits[0])  # 'apple'

# Добавление элемента
fruits.append('elderberry')

# Удаление по значению
fruits.remove('banana')

# Сортировка
fruits.sort()
print(fruits)

вывести номер строки python (вывод номера строки в python)

['apple', 'banana', 'cherry', 'date']
apple
['apple', 'cherry', 'date', 'elderberry']

вывести первый символ строки python (вывести первый символ строки в python)

Список строк легко преобразуется в строку с помощью join() и обратно через split(). Это решение подходит для 90% задач.

Типичные проблемы и их решение:

  • Изменение отдельного символа в строке: строка неизменяема, поэтому для замены символа нужно создать новую строку или преобразовать в список символов.
  • Путаница с кодировками: при работе с русскими буквами или юникодными символами в Python 3 проблем обычно нет, но при чтении из файла необходимо указывать кодировку.
  • Большие массивы: если требуется хранить миллионы строк, список может потреблять много памяти. В таких случаях рассматривают использование array('u') или numpy.

Варианты решения

Как сделать неизменяемый массив строк?

Если данные не должны изменяться, удобно использовать кортеж (tuple). Кортеж занимает меньше памяти и поддерживает все операции чтения.


days = ('пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс')
print(days[0])
# days[0] = 'ПН'  # Ошибка: кортеж не поддерживает изменение

вывести символ строки python (вывод символа строки в python)

Как создать массив строк, оптимизированный по памяти для Unicode?

Модуль array предоставляет тип 'u' для хранения Unicode-символов. Однако это массив символов, а не строк. Каждый элемент - один символ. Если нужны строки произвольной длины, этот вариант не подходит. Тогда можно использовать array('u') для хранения всех символов из нескольких строк, если строки можно объединить.


from array import array
# Массив символов (каждый элемент - один символ Unicode)
chars = array('u', 'hello')
print(chars[0])  # 'h'

вывести длину строки python (вывести длину строки в python)

Как получить массив уникальных строк?

Использование множества (set) позволяет хранить только уникальные строки. Порядок при этом не гарантируется.


words = ['apple', 'banana', 'apple', 'cherry', 'banana']
unique_words = list(set(words))
print(unique_words)

вывести элемент строки python (вывод конкретного символа строки по индексу в python)

['banana', 'cherry', 'apple']  # порядок может быть любым

заменить символ на другой python (замена символа в строке на python)

Как использовать массивы строк в научных вычислениях?

Библиотека numpy позволяет создавать массивы строк с типом данных dtype='U'. Это может быть удобно для операций над строками на уровне массивов.


import numpy as np
arr = np.array(['один', 'два', 'три'], dtype='U')
print(arr)
print(arr.dtype)

заменить текст python (замена подстроки в строке в python)

['один' 'два' 'три']
<U4

Распространённые ошибки и их устранение:

  • Изменение строки внутри массива: при попытке fruits[0][0] = 'A' возникнет TypeError. Нужно заменить элемент целиком: fruits[0] = 'Apple'.
  • Сравнение строк с учётом кодировки: неожиданное поведение при сравнении строк в разных кодировках. Рекомендуется привести все строки к одному кейсу (lower/upper) и использовать нормализацию Unicode.
  • Путаница между list и string: строка - это уже последовательность символов, но не массив строк. Если нужно работать с каждым символом как со строкой, можно разбить строку на список.
- Python первое слово в строке (извлечение первого слова из строки в python)
- Python часть текста (извлечение подстроки из строки в python)
- Python последнее слово в строке (извлечение последнего слова из строки в python)

Расширенные примеры работы с массивами строк

Генерация массива строк из диапазона чисел

Пример

# Создаём список строк вида 'item_1', 'item_2', ...
items = [f'item_{i}' for i in range(1, 6)]
print(items)
['item_1', 'item_2', 'item_3', 'item_4', 'item_5']

Применение регулярных выражений к каждому элементу

Пример

import re
emails = ['user1@example.com', 'invalid-email', 'user2@test.org', 'wrong']
# Оставляем только корректные email
valid = [e for e in emails if re.match(r'[\w.-]+@[\w.-]+\.\w+', e)]
print(valid)
['user1@example.com', 'user2@test.org']

Сортировка списка строк по длине

Пример

words = ['python', 'java', 'c', 'javascript', 'go']
words_sorted_by_len = sorted(words, key=len)
print(words_sorted_by_len)
['c', 'go', 'java', 'python', 'javascript']

Фильтрация строк, содержащих подстроку

Пример

names = ['Алексей', 'Мария', 'Александр', 'Елена', 'Алёна']
# Ищем имена, начинающиеся с 'Ал'
result = [name for name in names if name.startswith('Ал')]
print(result)
['Алексей', 'Александр', 'Алёна']

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

Пример

parts = ['HTML', 'CSS', 'JavaScript', 'Python']
sentence = ', '.join(parts)
print(sentence)
HTML, CSS, JavaScript, Python

Разбиение многострочной строки на массив строк

Пример

text = """Первая строка
Вторая строка
Третья строка"""
lines = text.split('\n')
print(lines)
['Первая строка', 'Вторая строка', 'Третья строка']

Использование textwrap для форматирования строк массива

Пример

import textwrap
poem = [
    'У лукоморья дуб зелёный;',
    'Златая цепь на дубе том:'
]
wrapped = [textwrap.fill(line, width=20) for line in poem]
for line in wrapped:
    print(line)
У лукоморья дуб
зелёный;
Златая цепь на дубе
том:

Объединение двух списков строк с помощью zip

Пример

names = ['Alice', 'Bob', 'Charlie']
scores = ['85', '92', '78']
combined = [f'{n}: {s}' for n, s in zip(names, scores)]
print(combined)
['Alice: 85', 'Bob: 92', 'Charlie: 78']

Подсчёт повторяющихся строк с использованием collections.Counter

Пример

from collections import Counter
colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
count = Counter(colors)
print(count)
# Вывод наиболее частого
print(count.most_common(1))
Counter({'blue': 3, 'red': 2, 'green': 1})
[('blue', 3)]

Удаление пустых строк из массива

Пример

data = ['apple', '', 'banana', '', 'cherry', '']
cleaned = [s for s in data if s]
print(cleaned)
['apple', 'banana', 'cherry']

Транспонирование списка строк (поворот на 90 градусов) с помощью zip

Пример

matrix = [
    'abc',
    'def',
    'ghi'
]
# Превращаем в список кортежей, где каждый кортеж - столбец
transposed = [''.join(tup) for tup in zip(*matrix)]
print(transposed)
['adg', 'beh', 'cfi']

Генерация всех последовательных подстрок (скользящее окно)

Пример

word = 'Python'
n = 3
substrings = [word[i:i+n] for i in range(len(word)-n+1)]
print(substrings)
['Pyt', 'yth', 'tho', 'hon']

Массив строк в Python - comments

En
Python string array (python)