Para explicar por que a lista não é impressa "apropriadamente", print(["Sam"])chama repr("Sam"), que retorna 'Sam'(com as aspas), ao contrário de quando você chama print("Sam")e chama python str("Sam")que retorna Sam(sem as aspas). Ver diferença entre strerepr ou Python stre lists para mais informações.
Isso usa a map()função de chamar str para cada elemento de mylist , criando uma nova lista de strings que é então unida em uma string com str.join(). Em seguida, o %operador de formatação de string substitui a string em em vez de %sem "[%s]".
Obrigado, isso funciona muito bem. Você pode explicar um pouco em detalhes o que você está fazendo na segunda linha? Eu sou novo em python.
Obaid
19
Ele está usando a mapfunção para chamar strcada elemento de mylist, criando uma nova lista de strings que ele então une em uma string str.join. Em seguida, ele usa o %operador de formatação de string para substituir a string em em vez de %sem "[%s]".
li.davidm
6
Outra maneira de fazer isso talvez seja um pouco mais moderna: "[{0}]".format(", ".join(str(i) for i in mylist))
Jack O'Connor
2
eu tendo a preferir map(f, xs)(ou imapem python2.x) sobre (f(x) for x in xs), quando fé um chamável predefinido; que tende a executar menos bytecodes e geralmente é mais compacto. Certamente nãomap(lambda x:..., xs) isso é muito pior do que(... for x in xs)
SingleNegationElimination
1
@ user1767754: sério? Ligação?
SingleNegationElimination
18
Este é um código simples, portanto, se você for novo, deve entendê-lo com bastante facilidade.
mylist =["x",3,"b"]for items in mylist:print(items)
Eu estou confusa com isso. O tipo de dados longos está filtrando a lista de alguma forma?
dval
Uma versão mais concisa seriaprint(end='['); print(*l, sep=', ', end=']\n')
Anônimo
9
Em vez de usar map, eu recomendo usar uma expressão geradora com a capacidade de joinaceitar um iterador:
def get_nice_string(list_or_iterator):return"["+", ".join( str(x)for x in list_or_iterator)+"]"
Aqui, joinestá uma função-membro da classe string str. Recebe um argumento: uma lista (ou iterador) de strings e retorna uma nova string com todos os elementos concatenados por, neste caso ,,.
Uma boa otimização para Python 2, uma vez que map retorna uma lista em 2.x. Ele retorna um gerador em 3.x, então não ajuda muito nisso.
Tom Zych
7
Eu voltaria", ".join( str(x) for x in list_or_iterator).join('[]')
eyquem
@eyquem: Inteligente, nunca vi o join ser usado assim antes. Ainda assim, isso é um pouco mais opaco para um iniciante (já que você está usando a propriedade de que uma string é um contêiner iterável de strings de um caractere).
Seth Johnson
6
Você pode excluir todos os caracteres indesejados de uma string usando seu translate()método com Nonepara o tableargumento seguido por uma string contendo o (s) caractere (s) que você deseja remover de seu deletecharsargumento.
Se estiver usando uma versão do Python anterior à 2.6, você precisará usar a função stringdo módulo, translate()porque a capacidade de passar Nonecomo o tableargumento não foi adicionada até o Python 2.6. Usando a aparência:
@eyquem: Sim, evitar a exclusão de caracteres que realmente fazem parte de seus dados (em vez de serem estritamente usados para delimitá-los) naturalmente exigiria uma lógica um pouco mais elaborada / diferente se for uma possibilidade.
martineau
3
Aqui está uma sessão interativa que mostra alguns dos passos do one-liner do @ TokenMacGuy. Primeiro, ele usa a mapfunção para converter cada item da lista em uma string (na verdade, ele está fazendo uma nova lista, não convertendo os itens da lista antiga). Então ele está usando o método string joinpara combinar essas strings com', ' entre elas. O resto é apenas formatação de string, que é bastante simples. (Editar: esta instância é direta; a formatação de strings em geral pode ser um tanto complexa.)
Observe que usar joiné uma maneira simples e eficiente de construir uma string a partir de várias substrings, muito mais eficiente do que fazê-lo adicionando strings sucessivamente a strings, o que envolve muitas cópias nos bastidores.
>>> mylist =['x',3,'b']>>> m = map(str, mylist)>>> m
['x','3','b']>>> j =', '.join(m)>>> j
'x, 3, b'
Ele apenas usa o formatmétodo. Sem vestígios de str, e permite o ajuste fino do formato dos elementos. Por exemplo, se você tiver números flutuantes como elementos da lista, você pode ajustar seu formato, adicionando um especificador de conversão, neste caso:.2f
print(["Sam"])
chamarepr("Sam")
, que retorna'Sam'
(com as aspas), ao contrário de quando você chamaprint("Sam")
e chama pythonstr("Sam")
que retornaSam
(sem as aspas). Ver diferença entrestr
erepr
ou Pythonstr
elist
s para mais informações.Respostas:
Em Python 2:
No Python 3 (onde
print
é uma função embutida e não um recurso de sintaxe mais):Ambos retornam:
Isso usa a
map()
função de chamar str para cada elemento de mylist , criando uma nova lista de strings que é então unida em uma string comstr.join()
. Em seguida, o%
operador de formatação de string substitui a string em em vez de%s
em"[%s]"
.fonte
map
função para chamarstr
cada elemento demylist
, criando uma nova lista de strings que ele então une em uma stringstr.join
. Em seguida, ele usa o%
operador de formatação de string para substituir a string em em vez de%s
em"[%s]"
."[{0}]".format(", ".join(str(i) for i in mylist))
map(f, xs)
(ouimap
em python2.x) sobre(f(x) for x in xs)
, quandof
é um chamável predefinido; que tende a executar menos bytecodes e geralmente é mais compacto. Certamente nãomap(lambda x:..., xs)
isso é muito pior do que(... for x in xs)
Este é um código simples, portanto, se você for novo, deve entendê-lo com bastante facilidade.
Imprime todos sem aspas, como você desejava.
fonte
Usando apenas impressão:
fonte
Se você estiver usando Python3:
fonte
print(end='['); print(*l, sep=', ', end=']\n')
Em vez de usar
map
, eu recomendo usar uma expressão geradora com a capacidade dejoin
aceitar um iterador:Aqui,
join
está uma função-membro da classe stringstr
. Recebe um argumento: uma lista (ou iterador) de strings e retorna uma nova string com todos os elementos concatenados por, neste caso,
,.fonte
", ".join( str(x) for x in list_or_iterator).join('[]')
Você pode excluir todos os caracteres indesejados de uma string usando seu
translate()
método comNone
para otable
argumento seguido por uma string contendo o (s) caractere (s) que você deseja remover de seudeletechars
argumento.Se estiver usando uma versão do Python anterior à 2.6, você precisará usar a função
string
do módulo,translate()
porque a capacidade de passarNone
como otable
argumento não foi adicionada até o Python 2.6. Usando a aparência:Usar a
string.translate()
função também funcionará no 2.6+, portanto, pode ser preferível usá-la.fonte
lst = ["it isn't", 3, 'b']
==>["it isnt", 3, b]
e também comlst = ['it isn\'t', 3, 'b']
Aqui está uma sessão interativa que mostra alguns dos passos do one-liner do @ TokenMacGuy. Primeiro, ele usa a
map
função para converter cada item da lista em uma string (na verdade, ele está fazendo uma nova lista, não convertendo os itens da lista antiga). Então ele está usando o método stringjoin
para combinar essas strings com', '
entre elas. O resto é apenas formatação de string, que é bastante simples. (Editar: esta instância é direta; a formatação de strings em geral pode ser um tanto complexa.)Observe que usar
join
é uma maneira simples e eficiente de construir uma string a partir de várias substrings, muito mais eficiente do que fazê-lo adicionando strings sucessivamente a strings, o que envolve muitas cópias nos bastidores.fonte
Usando
.format
para formatação de string,Resultado:
Explicação:
map
é usado para mapear cada elemento da lista parastring
digitar.,
separador.[
e]
na instrução print para mostrar as chaves da lista.Referência:
.format
para formatação de string PEP-3101fonte
.format
a forma mais python. Mas, é claro, aceito divergências. ;)Fui inspirado por @AniMenon para escrever uma solução pythônica mais geral.
Ele apenas usa o
format
método. Sem vestígios destr
, e permite o ajuste fino do formato dos elementos. Por exemplo, se você tiver números flutuantes como elementos da lista, você pode ajustar seu formato, adicionando um especificador de conversão, neste caso:.2f
O resultado é bastante decente:
fonte