Hoe kan ik een lijst “op de juiste manier” afdrukken?

Dus ik heb een lijst:

['x', 3, 'b']

En ik wil dat de uitvoer is:

[x, 3, b]

Hoe kan ik dit doen in python?

Als ik str(['x', 3, 'b'])doe, krijg ik er een met aanhalingstekens, maar ik wil geen aanhalingstekens.


Antwoord 1, autoriteit 100%

In Python 2:

mylist = ['x', 3, 'b']
print '[%s]' % ', '.join(map(str, mylist))

In Python 3 (waar printeen ingebouwde functie is en geen syntaxisfunctie meer):

mylist = ['x', 3, 'b']
print('[%s]' % ', '.join(map(str, mylist)))

Beide keren terug:

[x, 3, b]

Dit gebruikt de map()functie om str aan te roepen voor elk element van mylist, waardoor een nieuwe lijst met strings wordt gemaakt die vervolgens wordt samengevoegd tot één string met str.join(). Vervolgens vervangt de %tekenreeksopmaakoperator de tekenreeks in in plaats van %sin "[%s]".


Antwoord 2, autoriteit 11%

Dit is een eenvoudige code, dus als je nieuw bent, zou je het gemakkelijk genoeg moeten begrijpen.

mylist = ["x", 3, "b"]
for items in mylist:
    print(items)

Het drukt ze allemaal af zonder aanhalingstekens, zoals je wilde.


Antwoord 3, autoriteit 10%

Alleen afdrukken gebruiken:

>>> l = ['x', 3, 'b']
>>> print(*l, sep='\n')
x
3
b
>>> print(*l, sep=', ')
x, 3, b

4, Autoriteit 8%

Als u Python3 gebruikt:

print('[',end='');print(*L, sep=', ', end='');print(']')

5, Autoriteit 2%

Hier is een interactieve sessie met een aantal van de stappen in @ TokenmacGuy’s one-liner. Eerst gebruikt hij de map-functie om elk item in de lijst naar een string te converteren (eigenlijk maakt hij een nieuwe lijst en converteert de items niet in de oude lijst). Dan gebruikt hij de stringmethode joinom die snaren te combineren met ', 'ertussen. De rest is slechts een string-opmaak, wat vrij eenvoudig is. (EDIT: Dit exemplaar is eenvoudig; String-opmaak in het algemeen kan enigszins complex zijn.)

Houd er rekening mee dat het gebruik van joineen eenvoudige en efficiënte manier is om een ​​tekenreeks te bouwen van verschillende substrings, veel efficiënter dan het doen door achtereenvolgens strings aan snaren toe te voegen, wat veel kopiëren achter de scènes.

>>> mylist = ['x', 3, 'b']
>>> m = map(str, mylist)
>>> m
['x', '3', 'b']
>>> j = ', '.join(m)
>>> j
'x, 3, b'

6

met .formatvoor tekenreeksopmaak,

mylist = ['x', 3, 'b']
print("[{0}]".format(', '.join(map(str, mylist))))

Uitvoer:

[x, 3, b]

Uitleg:

  1. mapwordt gebruikt om elk element van de lijst toe te wijzen aan het type string.
  2. De elementen worden samengevoegd tot een string met ,als scheidingsteken.
  3. We gebruiken [en ]in de printopdracht om de lijstaccolades weer te geven.

Referentie:
.formatvoor tekenreeksopmaak PEP-3101


Antwoord 7

Ik werd geïnspireerd door @AniMenon om een pythonische, meer algemene oplossing te schrijven.

mylist = ['x', 3, 'b']
print('[{}]'.format(', '.join(map('{}'.format, mylist))))

Het gebruikt alleen de methode format. Geen spoor van str, en het zorgt voor de fijnafstemming van het elementenformaat.
Als u bijvoorbeeld zwevende getallen als elementen van de lijst heeft, kunt u hun formaat aanpassen door een conversiespecificatie toe te voegen, in dit geval :.2f

mylist = [1.8493849, -6.329323, 4000.21222111]
print("[{}]".format(', '.join(map('{:.2f}'.format, mylist))))

De uitvoer is redelijk:

[1.85, -6.33, 4000.21]

Other episodes