Eu tenho uma entrada como esta:
['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
Eu quero unir elementos entre ''
para ter uma saída como esta:
['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']
Tentei usar join
e listar fatias como esta:
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++']
Isso funciona até certo ponto, mas não sei como iterar essa instrução para a lista inteira.
Isso é horrível e hacky, mas
pode pegar qualquer string que você possa garantir que não esteja contida na concatenação da lista e retornar uma função fazendo o que você deseja. Obviamente, você provavelmente deseja usar isso apenas uma ou duas vezes para sua situação específica; portanto, se você puder garantir que nenhum elemento da lista contenha um espaço, pode parecer mais com:
fonte
Se você não pode ou não deseja usar as ferramentas:
fonte
Você consegue fazer isso:
Resultado:
Editar após os comentários:
Resultado:
fonte
# get the indices.
não é um comentário muito útil. Eu sugiro que você o torne útil (por exemplofilter the indices to keep only those that correspond to whitespace
) ou remova-o totalmente.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+', '+']
, mas parece que você poderia melhorar sua linha 3 anexando uma lista com uma cadeia nula nas extremidades de umenumerate([''] + a + [''])
, em seguida, remover oa[0:indx[0]]
ea[indx[-1]+1:]
em sua linha 4. Isto ainda não leva em conta se há duas cadeias nulas ao lado eachother emboraSe os delimitadores de entrada forem realmente cadeias vazias, você poderá fazer
fonte
Bastante antigo, mas ainda útil:
Isso gera
fonte
executar um loop na lista
dentro do loop anexa o elemento a uma string vazia temporária e verifica a condição de se o elemento é uma string vazia ou o último elemento da lista, se true, acrescenta a variável temporária à lista de saída e altera o valor dessa variável para uma string vazia
Code:
Resultado:
['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']
fonte
Concordo que a resposta Cris usa a abordagem mais python , mas será bom adaptar um pouco a resposta Cris . Em vez de usar
groupby(l,key = bool)
para usargroupby(l, key = lambda x: x !='')
e se livrar de ambiguidade desnecessáriaPS: Só estou escrevendo a nova resposta porque não tenho reputação suficiente para escrever um comentário sobre a resposta da Cris .
fonte
Outra versão de trabalho, com apenas loops / testes básicos:
fonte