Tengo una entrada como esta:
['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
Quiero unir elementos ''
para tener una salida como esta:
['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']
Traté de usar join
y cortar en rebanadas de esta manera:
a=['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
a[2:5] = [''.join(a[ 2: 5])]
a=['assembly', '', 'python', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
Esto funciona hasta cierto punto, pero no sé cómo repetir esta instrucción para toda la lista.
Esto es horrible y hacky, pero
puede tomar cualquier cadena que pueda garantizar que no esté contenida en la concatenación de la lista y devolver una función que haga lo que desee. Por supuesto, probablemente quiera usar esto solo una o dos veces para su situación específica, por lo tanto, si puede garantizar que ningún elemento de la lista contenga un espacio, podría parecerse más a:
fuente
Si no puede o no quiere usar itertools:
fuente
Puedes hacerlo:
Salida:
Editar después de los comentarios:
Salida:
fuente
# get the indices.
No es un comentario muy útil. Te sugiero que lo hagas útil (por ejemplofilter the indices to keep only those that correspond to whitespace
) o que lo elimines por completo.indices = [i for s in a if s == '']
?indx = [i for i, x in enumerate(a) if x == '']
a = ['asse','mbly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c+', '+']
, pero parece que se podría mejorar su línea 3 añadiendo una lista con una cadena nula en los extremos de unaenumerate([''] + a + [''])
continuación de retirar ela[0:indx[0]]
ya[indx[-1]+1:]
en su línea 4. Esto todavía no dar cuenta de si hay dos cadenas nulas justo al lado de fuerza aunqueSi los delimitadores de entrada son realmente cadenas vacías, entonces puede hacer
fuente
Bastante viejo pero aún útil:
Esto produce
fuente
ejecute un ciclo sobre la lista
dentro del ciclo agregue el elemento a una cadena vacía temporal y verifique la condición de si el elemento es una cadena vacía o el último elemento de la lista, si es verdadero, agregue la variable temporal a la lista de salida y cambie el valor de esa variable a una cadena vacía
Código:
Salida:
['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']
fuente
Estoy de acuerdo en que la respuesta Cris utiliza la mayoría de los enfoques de Python , pero será bueno adaptar un poco la respuesta Cris . En lugar de usar
groupby(l,key = bool)
para usargroupby(l, key = lambda x: x !='')
y deshacerse de la ambigüedad innecesariaPD: Solo estoy escribiendo la nueva respuesta porque no tengo suficiente reputación para escribir un comentario sobre la respuesta de Cris .
fuente
Otra versión de trabajo, con solo bucles / pruebas básicas:
fuente