Python | Divida la lista de strings en sublistas según la longitud

Dada una lista de strings, escriba un programa de Python para dividir la lista en sublistas según la longitud de la string.
Ejemplos: 
 

Input : ['The', 'art', 'of', 'programming']
Output : [['of'], ['The', 'art'], ['programming']]

Input : ['Welcome', 'to', 'geeksforgeeks']
Output : [['to'], ['Welcome'], ['geeksforgeeks']]

Enfoque n.º 1: Pythonic ingenuo
Un enfoque ingenuo para el método anterior utiliza un diccionario y un bucle for para recorrer la lista. En cada iteración, verifica si la longitud del elemento ya está en la lista o no. De lo contrario, agrega la longitud del elemento y el elemento como par clave:valor; de lo contrario, el elemento simplemente se agrega a la sublista de valores. Finalmente, hacemos una lista de todos los valores del dict y lo devolvemos.
 

Python3

# Python3 program to Divide list of strings
# into sublists based on string length
 
def divideList(lst):
    dct = {}
 
    for element in lst:
        if len(element) not in dct:
            dct[len(element)] = [element]
        elif len(element) in dct:
            dct[len(element)] += [element]
     
    res = []
    for key in sorted(dct):
        res.append(dct[key])
     
    return res
     
# Driver code
lst = ['The', 'art', 'of', 'programming']
print(divideList(lst))
Producción: 

[['of'], ['The', 'art'], ['programming']]

 

  
Enfoque #2: defaultdict() del módulo de colecciones
Este método usa defaultdict y lo guarda en una variable ‘group_by_len’. Usando un bucle for, guardamos la longitud de la string como clave y la string con la longitud de la clave como su valor. Finalmente, hacemos una lista de todos los valores de ‘group_by_len’ y la devolvemos. 
 

Python3

# Python3 program to Divide list of strings
# into sublists based on string length
from collections import defaultdict
 
def divideList(lst):
    group_by_len = defaultdict(list)
    for ele in lst:
        group_by_len[len(ele)].append(ele)
         
    res = []
    for key in sorted(group_by_len):
        res.append(group_by_len[key])
         
    return res
     
# Driver code
lst = ['The', 'art', 'of', 'programming']
print(divideList(lst))
Producción: 

[['of'], ['The', 'art'], ['programming']]

 

  
Enfoque #3: groupby() del módulo itertools
El método más eficiente y simple para resolver el problema dado es usar groupby() del módulo itertools . Esta es una línea en la que usamos dos variables ‘l’ (para longitud) y ‘g’ (grupo de strings) para atravesar ‘lst’, agrupadas por longitud y finalmente devolver todos los grupos empaquetados dentro de una lista. 
 

Python3

# Python3 program to Divide list of strings
# into sub lists based on string length
from itertools import groupby
 
def divideList(lst):
    res = dict((l, list(g)) for l, g in groupby(lst, key = len))
 
    # Sorting dict by key
    res = sorted(res.items(), key = lambda kv:(kv[0], kv[1]))
 
    # Removing key from list of tuple
    return [el[1:] for el in (tuple(x) for x in res)]
     
# Driver code
lst = ['The', 'art', 'of', 'programming']
print(divideList(lst))
Producción: 

[(['of'],), (['The', 'art'],), (['programming'],)]

 

Publicación traducida automáticamente

Artículo escrito por Smitha Dinesh Semwal 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 *