Imprimir lista sem colchetes em uma única linha

162

Eu tenho uma lista em Python, por exemplo

names = ["Sam", "Peter", "James", "Julian", "Ann"]

Quero imprimir a matriz em uma única linha sem o normal "[]

names = ["Sam", "Peter", "James", "Julian", "Ann"]
print (names)

Dará a saída como;

["Sam", "Peter", "James", "Julian", "Ann"]

Esse não é o formato que eu quero, e sim que seja assim;

Sam, Peter, James, Julian, Ann

Nota: deve estar em uma única linha.

Isuru
fonte

Respostas:

242
print(', '.join(names))

Parece que isso apenas pega todos os elementos da lista e os une ', '.

Erro fatal
fonte
9
Se alguns elementos namesnão forem cadeias, use-os print(', '.join(map(str,name))).
anónimo
78

Aqui está um simples.

names = ["Sam", "Peter", "James", "Julian", "Ann"]
print(*names, sep=", ")

a estrela descompacta a lista e retorna todos os elementos da lista.

Jianru Shi
fonte
8
Em python 2.7.6, este é um SyntaxError: invalid syntax.
Fredrick Gauss
1
@FredrickGauss, se você adicionar from __future__ import print_function, também funcionará em python 2.
Anthony Sottile
1
Esta é a resposta correta, pois também funciona com não-strings.
Otocan 28/02
41

Solução geral, funciona em matrizes de não-strings:

>>> print str(names)[1:-1]
'Sam', 'Peter', 'James', 'Julian', 'Ann'
Steve Bennett
fonte
9
Isso não atende ao requisito declarado. Observe o exemplo do OP mostrando os nomes resultantes sem aspas.
John Y
1
@SteveBennett, por favor, explique a fatia [1: -1] na sua resposta. Eu apenas comecei a aprender python. Obrigado.
Charan
3
str(names)gera uma string como ['Sam', 'Peter'...'Ann']. Não queremos colchetes, portanto, divida do segundo caractere para o segundo último caractere.
Steve Bennett
22

Se a matriz de entrada for do tipo Inteiro , você precisará primeiro converter a matriz em matriz do tipo string e, em seguida, usar o joinmétodo para ingressar ,ou espaçar o que quiser. por exemplo:

>>> arr = [1, 2, 4, 3]
>>> print(", " . join(arr))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found
>>> sarr = [str(a) for a in arr]
>>> print(", " . join(sarr))
1, 2, 4, 3
>>>

O uso direto de join, que unirá o número inteiro e a string, lançará um erro como mostrado acima.

Krishna Prasad
fonte
18

Existem duas respostas: primeiro, use a configuração 'sep'

>>> print(*names, sep = ', ')

O outro está abaixo

>>> print(', '.join(names))
lyerox
fonte
10

Isto é o que você precisa

", ".join(names)
user278064
fonte
1
Envolve o resultado entre aspas.
Fredrick Gauss
7

','.join(list)funcionará apenas se todos os itens da lista forem cadeias de caracteres. Se você deseja converter uma lista de números em uma sequência separada por vírgula. como a = [1, 2, 3, 4]em '1,2,3,4'que você pode

str(a)[1:-1] # '1, 2, 3, 4'

ou

str(a).lstrip('[').rstrip(']') # '1, 2, 3, 4'

embora isso não remova nenhuma lista aninhada.

Para convertê-lo novamente em uma lista

a = '1,2,3,4'
import ast
ast.literal_eval('['+a+']')
#[1, 2, 3, 4]
Vineeth Sai
fonte
4

Você precisa percorrer a lista e usá end=" "-la para mantê-la em uma linha

names = ["Sam", "Peter", "James", "Julian", "Ann"]
    index=0
    for name in names:
        print(names[index], end=", ")
        index += 1
Guerreiro Tofu
fonte
O OP diz que deve estar em uma única linha.
Ali
2

print (* nomes)

isso funcionará no python 3 se você desejar que eles sejam impressos como espaço separado. Se você precisar de vírgula ou qualquer outra coisa, vá em frente com a solução .join ()

ppmakeitcount
fonte
1

Não sei se isso é eficiente como outros, mas a lógica simples sempre funciona:

import sys
name = ["Sam", "Peter", "James", "Julian", "Ann"]
for i in range(0, len(names)):
    sys.stdout.write(names[i])
    if i != len(names)-1:
        sys.stdout.write(", ")

Resultado:

Sam, Peter, James, Julian, Ann

Fredrick Gauss
fonte
0

A seguinte função entrará em uma lista e retornará uma sequência de itens das listas. Isso pode ser usado para fins de registro ou impressão.

def listToString(inList):
    outString = ''
    if len(inList)==1:
        outString = outString+str(inList[0])
    if len(inList)>1:
        outString = outString+str(inList[0])
        for items in inList[1:]:
            outString = outString+', '+str(items)
    return outString
Rajesh Thennan
fonte