Python | Unir solo palabras adyacentes en la lista

A veces, más de un tipo de datos puede aparecer en la lista de Python y, a veces, se tokeniza de manera no deseada y, por lo tanto, debemos unir las palabras que se han tokenizado y dejar los dígitos como están. Analicemos ciertas formas en que se puede lograr esta tarea.

Método n.º 1: usar la comprensión de listas +"*" operator
Esta tarea se puede realizar usando la comprensión de listas, primero uniendo las palabras y luego uniendo los dígitos y luego separando solo los números, mientras se unen para formar la string resultante.

# Python3 code to demonstrate
# joining only adjacent words in list 
# list comprehension + "*" operator
  
# initializing list  
test_list = ['Geeks', '5', 'for', '9', 'Geeks' , '2', '5']
  
# printing original list
print("The original list : " + str(test_list))
  
# using list comprehension + "*" operator
# joining only adjacent words in list
res = [''.join([i for i in test_list if not i.isdigit()]),
                  *[j for j in test_list if j.isdigit()]]
  
# print result
print("The joined adjacent word list(ignoring digits) : " + str(res))
Producción:

La lista original: [‘Geeks’, ‘5’, ‘for’, ‘9’, ‘Geeks’, ‘2’, ‘5’]
La lista de palabras adyacentes unidas (ignorando los dígitos): [‘GeeksforGeeks’, ‘5 ‘, ‘9’, ‘2’, ‘5’]

Método #2: Usaritertools.chain.from_iterable() + groupby() + join()
Esta tarea también se puede realizar usando la función groupby que agrupa los dígitos y luego from_iterables la función une la lista y los caracteres unidos por la función de unión.

# Python3 code to demonstrate
# joining only adjacent words in list 
# itertools.chain.from_iterable() + groupby() + join()
from itertools import chain, groupby
  
# initializing list  
test_list = ['Geeks', '5', 'for', 'Geeks' , '2', '3']
  
# printing original list
print("The original list : " + str(test_list))
  
# using itertools.chain.from_iterable() + groupby() + join()
# joining only adjacent words in list
num_group = groupby(test_list, key = str.isalpha)
both_group = [[''.join(i)] if j else list(i)
                      for j, i in num_group]
  
res = list(chain.from_iterable(both_group))
  
# print result
print("The joined adjacent word list(ignoring digits) : "
                                               + str(res))
Producción:

La lista original: [‘Geeks’, ‘5’, ‘for’, ‘Geeks’, ‘2’, ‘3’]
La lista de palabras adyacentes unidas (ignorando los dígitos): [‘Geeks’, ‘5’, ‘forGeeks ‘, ‘2’, ‘3’]

Publicación traducida automáticamente

Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *