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))
[['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))
[['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))
[(['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