Python, dividir para dividir unha cadea separada por comas, eliminar espazos en branco e converter nunha lista

Negocios

Ao dividir unha cadea separada por comas nunha lista en Python, se non hai espazos no medio, só funcionará split(). Se hai espazos, é útil combinalo con strip() para eliminar os espazos adicionais. Ademais, usar a notación de comprensión da lista é unha forma intelixente de escribir.

Nesta sección, primeiro explicamos o seguinte.

  • Divide unha cadea cun delimitador especificado e devólvea como unha listasplit()
  • Elimina os caracteres adicionais do comezo e do final dunha cadea.strip()
  • Notación de comprensión de listas para aplicar funcións e métodos a elementos da lista.

Tamén mostra como facer unha lista de cadeas separadas por espazos e comas eliminando espazos, como se mostra a continuación.
one, two, three'

Ademais, comentaremos o seguinte

  • Como obtelo como unha lista de números
  • Como usar join() para unirse a unha lista e convertela nunha cadea de novo

split():Divide unha cadea cun delimitador especificado e devólvea como unha lista

Usando o método split() para cadeas, pode dividir unha cadea cun delimitador especificado e obtelo como unha lista (matriz). O delimitador especificado pódese especificar co seguinte argumento.sep

Se o argumento sep se omite e non se especifica ningún delimitador, divídese a cadea por espazos e devolve unha lista. Os espazos e tabulacións consecutivos tamén dividirán a lista, polo que se queres facer unha lista de cadeas delimitadas por tabulacións, podes usar split() sen o argumento.

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']

Se se especifica un delimitador no argumento sep, divide a lista por esa cadea e devolve unha lista.

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

No caso dunha cadea separada por comas, se non hai espazo en branco adicional, non hai problema, pero se executas split() cunha coma como delimitador dunha cadea separada por coma + espazo en branco, rematarás. arriba cunha lista de cadeas con espazo en branco ao principio.

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

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

Podes usar coma + espazo como delimitador do seguinte xeito, pero non funcionará se o número de espazos na cadea orixinal é diferente., '

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

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

O método de cadea strip(), que se explicará a continuación, pódese usar para tratar con dous espazos.

strip():Elimina os caracteres adicionais do comezo e do final dunha cadea.

strip() é un método para eliminar caracteres adicionais do comezo e do final dunha cadea.

Se o argumento se omite, devólvese unha nova cadea cos espazos en branco eliminados. A cadea orixinal non se modifica.

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

print(s)
#   one  

Se se especifica unha cadea como argumento, eliminaranse os caracteres contidos na cadea.

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

Neste caso, non se eliminan espazos. Polo tanto, se tamén quere eliminar espazos en branco, pase unha cadea que inclúa espazos como argumento, como se mostra a continuación.-+ '

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

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

strip() xestiona os dous extremos, pero tamén están dispoñibles as seguintes funcións.

  • lstrip():Procesar só o principio
  • rstrip():Procesa só o final da liña.

Notación de comprensión de listas: aplica funcións e métodos aos elementos da lista

Se queres aplicar unha función ou un método aos elementos dunha lista, é intelixente usar a notación de comprensión da lista en lugar do bucle for se queres obter a lista ao final.

Aquí, aplicamos strip() á lista obtida dividindo a cadea con split(). O espazo en branco adicional nunha cadea separada por comas que contén espazos en branco pódese eliminar para facer unha lista.

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

Cando se aplica a unha cadea baleira, pódese obter unha lista cunha única cadea baleira como elemento.

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

Se queres obter unha lista baleira para unha cadea baleira, podes configurar unha rama condicional na notación de comprensión da lista.

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

one, , three'
Ademais, se falta un elemento separado por comas, como se describiu anteriormente, o primeiro método listarao como un elemento de cadea baleiro.

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

Se queres ignorar as partes que faltan, podes configurar unha rama condicional na notación de comprensión da lista.

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

Obter unha lista de números

Se queres obter unha cadea de números separados por comas como unha lista de números en lugar dunha cadea, aplica int() ou float() para converter a cadea nun número na notación de comprensión da lista.

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():Combina unha lista e obteo como unha cadea

No patrón oposto, se quere unirse a unha lista e obter cadeas separadas por un delimitador específico, use o método join().

É fácil cometer un erro, pero teña en conta que join() é un método de cadea, non un método de lista. A lista especifícase como argumento.

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

Podes escribilo nunha liña do seguinte xeito.

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

Se só quere cambiar un delimitador fixo, é máis fácil substituílo polo método substituír().

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