Python, split для разделения строки, разделенной запятыми, удаления пробелов и преобразования в список

Бизнес

При разбиении строки, разделенной запятой, на список в Python, если между ними нет пробелов, работает просто split(). Если пробелы есть, полезно объединить ее с функцией strip(), чтобы удалить лишние пробелы. Кроме того, использование нотации понимания списка — это разумный способ написания.

В этом разделе мы сначала объясним следующее.

  • Разделить строку с заданным разделителем и вернуть ее в виде спискаsplit()
  • Удаление лишних символов из начала и конца строки.strip()
  • Нотация понимания списка для применения функций и методов к элементам списка.

Здесь также показано, как составить список строк, разделенных пробелами и запятыми, удалив пробелы, как показано ниже.
'one, two, three'

Кроме того, мы обсудим следующее

  • Как получить его в виде списка чисел
  • Как использовать функцию join() для объединения списка и превращения его в строку

split(): Разделить строку с заданным разделителем и вернуть ее в виде списка

Используя метод split() для строк, вы можете разделить строку с указанным разделителем и получить ее в виде списка (массива). Указанный разделитель может быть задан следующим аргументом.sep

Если аргумент sep опущен и не указан разделитель, то функция разделяет строку на пробелы и возвращает список. Последовательные пробелы и табуляции также разделят список, поэтому если вы хотите создать список строк, разделенных табуляцией, вы можете использовать split() без аргумента.

s = 'one two three'
l = s.split()
print(l)
# ['one', 'two', 'three']

s = 'one two        three'
l = s.split()
print(l)
# ['one', 'two', 'three']

s = 'one\ttwo\tthree'
l = s.split()
print(l)
# ['one', 'two', 'three']

Если в аргументе sep указан разделитель, он делит список на эту строку и возвращает список.

s = 'one::two::three'
l = s.split('::')
print(l)
# ['one', 'two', 'three']

В случае строки, разделенной запятой, если нет лишнего пробела, то проблемы нет, но если вы запустите split() с запятой в качестве разделителя для строки, разделенной запятой + пробел, то в итоге вы получите список строк с пробелом, оставленным в начале.

s = 'one,two,three'
l = s.split(',')
print(l)
# ['one', 'two', 'three']

s = 'one, two, three'
l = s.split(',')
print(l)
# ['one', ' two', ' three']

Вы можете использовать запятую + пробел в качестве разделителя следующим образом, но это не сработает, если количество пробелов в исходной строке отличается.', '

s = 'one, two, three'
l = s.split(', ')
print(l)
# ['one', 'two', 'three']

s = 'one, two,  three'
l = s.split(', ')
print(l)
# ['one', 'two', ' three']

Для работы с двумя пробелами можно использовать строковый метод strip(), о котором будет рассказано далее.

strip(): Удаление лишних символов из начала и конца строки.

strip() — это метод удаления лишних символов из начала и конца строки.

Если аргумент опущен, возвращается новая строка с удаленными символами пробелов. Сама исходная строка не изменяется.

s = '  one  '
print(s.strip())
# one

print(s)
#   one  

Если в качестве аргумента указана строка, то символы, содержащиеся в строке, будут удалены.

s = '-+-one-+-'
print(s.strip('-+'))
# one

В этом случае пробелы не удаляются. Поэтому, если вы хотите удалить пробельные символы, передайте в качестве аргумента строку, включающую пробелы, как показано ниже.'-+ '

s = '-+- one -+-'
print(s.strip('-+'))
#  one 

s = '-+- one -+-'
print(s.strip('-+ '))
# one

strip() обрабатывает оба конца, но также доступны следующие функции.

  • lstrip():Процесс — это только начало
  • rstrip():Обрабатывайте только конец строки.

Нотация для понимания списка: применение функций и методов к элементам списка

Если вы хотите применить функцию или метод к элементам списка, разумно использовать нотацию list comprehension вместо цикла for, если вы хотите получить список в конце.

Здесь мы применяем функцию strip() к списку, полученному в результате разбиения строки с помощью функции split(). Лишние пробелы в строке, разделенной запятыми и содержащей пробелы, могут быть удалены для создания списка.

s = 'one, two, three'
l = [x.strip() for x in s.split(',')]
print(l)
# ['one', 'two', 'three']

Когда это применяется к пустой строке, можно получить список с единственной пустой строкой в качестве элемента.

s = ''
l = [x.strip() for x in s.split(',')]
print(l)
print(len(l))
# ['']
# 1

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

s = ''
l = [x.strip() for x in s.split(',') if not s == '']
print(l)
print(len(l))
# []
# 0

'one, , three'
Кроме того, если элемент, разделенный запятой, отсутствует, как описано выше, первый метод перечислит его как элемент пустой строки.

s = 'one, , three'
l = [x.strip() for x in s.split(',')]
print(l)
print(len(l))
# ['one', '', 'three']
# 3

Если вы хотите игнорировать недостающие части, вы можете задать условную ветвь в нотации понимания списка.

s = 'one, ,three'
l = [x.strip() for x in s.split(',') if not x.strip() == '']
print(l)
print(len(l))
# ['one', 'three']
# 2

Получить в виде списка чисел

Если вы хотите получить строку чисел, разделенных запятыми, в виде списка чисел, а не строки, примените int() или float() для преобразования строки в число в нотации list comprehension.

s = '1, 2, 3, 4'
l = [x.strip() for x in s.split(',')]
print(l)
print(type(l[0]))
# ['1', '2', '3', '4']
# <class 'str'>

s = '1, 2, 3, 4'
l = [int(x.strip()) for x in s.split(',')]
print(l)
print(type(l[0]))
# [1, 2, 3, 4]
# <class 'int'>

join(): Объедините список и получите его в виде строки

В противоположном случае, если вы хотите объединить список и получить строки, разделенные определенным разделителем, используйте метод join().

Легко ошибиться, но обратите внимание, что join() — это строковый метод, а не метод списка. Список указывается в качестве аргумента.

s = 'one, two,  three'
l = [x.strip() for x in s.split(',')]
print(l)
# ['one', 'two', 'three']

print(','.join(l))
# one,two,three

print('::'.join(l))
# one::two::three

Вы можете записать его в одной строке следующим образом.

s = 'one, two,  three'
s_new = '-'.join([x.strip() for x in s.split(',')])
print(s_new)
# one-two-three

Если вы просто хотите изменить фиксированный разделитель, проще заменить его с помощью метода replace().

s = 'one,two,three'
s_new = s.replace(',', '+')
print(s_new)
# one+two+three