Qual seria sua maneira preferida de concatenar seqüências de caracteres de uma sequência, de modo que entre cada dois pares consecutivos uma vírgula seja adicionada. Ou seja, como você mapeia, por exemplo, ['a', 'b', 'c']
para 'a,b,c'
? (Os casos ['s']
e []
devem ser mapeados para 's'
e ''
, respectivamente.)
Normalmente, acabo usando algo como ''.join(map(lambda x: x+',',l))[:-1]
, mas também me sentindo um pouco insatisfeito.
Por que a
map
/lambda
magia? Isso não funciona?Caso haja números na lista, você pode usar a compreensão da lista:
ou uma expressão geradora:
fonte
",".join(l)
não funcionará para todos os casos. Eu sugiro usar o módulo csv com StringIOfonte
StringIO
no Python 3from io import StringIO
em Python 3Aqui está uma solução alternativa no Python 3.0 que permite itens de lista que não são de cadeia:
uma maneira padrão
a solução alternativa
NOTA: O espaço após a vírgula é intencional.
fonte
Você não quer apenas:
Obviamente, fica mais complicado se você precisar citar / escapar vírgulas etc. nos valores. Nesse caso, eu sugeriria olhar o módulo csv na biblioteca padrão:
https://docs.python.org/library/csv.html
fonte
@Peter Hoffmann
O uso de expressões geradoras também beneficia a produção de um iterador, mas economiza a importação de iteróis. Além disso, as compreensões de lista são geralmente preferidas para mapear, portanto, eu esperaria que expressões de gerador fossem preferidas ao imap.
fonte
my_list
pode conter qualquer tipo de variável. Isso evita o resultado'A,,,D,E'
.fonte
fonte
@ jmanning2k usando uma compreensão de lista tem a desvantagem de criar uma nova lista temporária. A melhor solução seria usar itertools.imap, que retorna um iterador
fonte
str.join
o trabalho mais rápido comlist
em comparação com geradorAqui está um exemplo com lista
Mais preciso:-
Exemplo 2: -
fonte
Eu diria que a
csv
biblioteca é a única opção sensata aqui, pois foi criada para lidar com todos os casos de uso do csv, como vírgulas em uma string, etc.Para gerar uma lista
l
para um arquivo .csv:Também é possível usar
writer.writerows(iterable)
a saída de várias linhas para csv.Este exemplo é compatível com o Python 3, pois a outra resposta usada aqui
StringIO
é o Python 2.fonte
A menos que esteja faltando alguma coisa,
','.join(foo)
faça o que você está pedindo.(editar: e como jmanning2k aponta,
é mais seguro e bastante pitonico, embora a cadeia resultante seja difícil de analisar se os elementos puderem conter vírgulas - nesse ponto, você precisa de toda a potência do
csv
módulo, como Douglas aponta em sua resposta.)fonte
Meus dois centavos. Eu gosto mais simples de um código de uma linha em python:
É pythonic, funciona para strings, números, None e string vazia. É curto e satisfaz os requisitos. Se a lista não contiver números, podemos usar esta variação mais simples:
Além disso, essa solução não cria uma nova lista, mas usa um iterador, como @Peter Hoffmann apontou (obrigado).
fonte