How to Print a List Without Brackets in Python

To print a list without brackets in Python, unpack it into print() with a star: print(*my_list). Each item becomes its own argument, so Python prints them separated by spaces with no brackets, commas or quotes. Add sep to choose the separator:

cities = ["Austin", "Denver", "Seattle"]
print(*cities, sep=", ")   # Austin, Denver, Seattle

Each snippet ran under Python 3.12.5 in a Windows Command Prompt window, so the outputs you see are real.

We’ll go through unpacking, join() for when you need an actual string, the slicing trick that leaves quotes behind, prices with dollar signs, and lists of lists.

Print a list without brackets using the * unpacking operator

By default, print(cities) shows the list’s repr: square brackets, commas and quotes around every string. Putting * in front spreads the items out as separate arguments instead:

cities = ["Austin", "Denver", "Seattle", "Boston"]

print(cities)               # the default list repr
print(*cities)              # unpacked: space between items
print(*cities, sep=", ")    # custom separator
print(*cities, sep="\n")    # one item per line

zip_codes = [73301, 80202, 98101]
print(*zip_codes, sep=" | ")  # numbers work too, no str() needed

Output:

['Austin', 'Denver', 'Seattle', 'Boston']
Austin Denver Seattle Boston
Austin, Denver, Seattle, Boston
Austin
Denver
Seattle
Boston
73301 | 80202 | 98101
Command Prompt output of Python printing a list of US cities with brackets, then without brackets using print(*cities) and sep
The first line is the normal bracketed list; the star versions print only the items, with whatever separator you pass.

I like this one because it doesn’t care about types: the ZIP codes print fine without any conversion. The star works in other places too, as my guide to unpacking a list in Python shows.

Turn a list into a string without brackets using join()

print(*lst) only prints. When you’ll need the text itself, say for a log line, a CSV cell or an email body, build it with str.join(). The catch is that join() accepts strings only:

cities = ["Austin", "Denver", "Seattle"]
print(", ".join(cities))

order_ids = [1042, 1043, 1050]
try:
    print(", ".join(order_ids))
except TypeError as err:
    print("TypeError:", err)

print(", ".join(map(str, order_ids)))
print(" -> ".join(str(n) for n in order_ids))

Output:

Austin, Denver, Seattle
TypeError: sequence item 0: expected str instance, int found
1042, 1043, 1050
1042 -> 1043 -> 1050
Command Prompt output of Python join on a list of strings, the TypeError for integers, and the map(str) fix
Joining strings works directly; joining integers raises a TypeError until each item is converted with str().

map(str, order_ids) converts every item before joining. If you haven’t used it before, the Python map() function is worth a quick read, and concatenating a list of strings into one string goes deeper on join().

Why does str(list)[1:-1] still show quotes?

A common shortcut is to convert the list to a string and slice off the first and last characters. It removes the brackets, but with strings the quotes from the repr stay put:

states = ["Texas", "Ohio", "Utah"]
scores = [88, 92, 79]

print(str(states)[1:-1])    # brackets gone, quotes stay
print(str(scores)[1:-1])    # fine for numbers
print(str(states).strip("[]").replace("'", ""))  # works, but breaks on "O'Brien"
print(", ".join(states))    # the clean way

Output:

'Texas', 'Ohio', 'Utah'
88, 92, 79
Texas, Ohio, Utah
Texas, Ohio, Utah
Command Prompt output of Python str(list)[1:-1] removing brackets but keeping quotes, compared with join
Slicing works for the number list, but the state names keep their single quotes; join() gives clean output.

Stripping quotes with replace() looks like a fix until a value contains an apostrophe, like O’Brien. I stick with join(). If you actually want quotes in the output, see printing quotes in Python.

Print a list of prices without brackets

Unpacking prints floats exactly as Python stores them, and that isn’t how money should look. A generator inside join() lets you format each value as you go:

prices = [19.5, 4.25, 120.0, 7.999]

print(*prices, sep=", ")
print(", ".join(f"${p:.2f}" for p in prices))
print(f"Total: ${sum(prices):,.2f}")

Output:

19.5, 4.25, 120.0, 7.999
$19.50, $4.25, $120.00, $8.00
Total: $151.75

The :.2f spec rounds to two decimal places, so 7.999 shows as $8.00. More rounding options are covered in printing 2 decimal places in Python.

Print a nested list without brackets, row by row

Unpacking a list of lists only removes the outer brackets; each inner list still prints with its own. Loop over the rows and unpack each one instead:

orders = [
    ["2026-03-02", "Emily Carter", "Austin", 42.50],
    ["2026-03-05", "James Miller", "Denver", 18.00],
    ["2026-03-09", "Olivia Brown", "Seattle", 127.25],
]

print(orders[0])                 # one row, still bracketed
for row in orders:
    print(*row, sep=" | ")       # each row without brackets

for date, name, city, amount in orders:
    print(f"{date}  {name:<13} {city:<8} ${amount:>7.2f}")

Output:

['2026-03-02', 'Emily Carter', 'Austin', 42.5]
2026-03-02 | Emily Carter | Austin | 42.5
2026-03-05 | James Miller | Denver | 18.0
2026-03-09 | Olivia Brown | Seattle | 127.25
2026-03-02  Emily Carter  Austin   $  42.50
2026-03-05  James Miller  Denver   $  18.00
2026-03-09  Olivia Brown  Seattle  $ 127.25
Command Prompt output of Python printing a list of order rows without brackets using a loop with sep and an aligned f-string
The first row prints with brackets; the loop prints pipe-separated rows, and the f-string version lines the columns up.

For anything wider than a few columns, the aligned f-string reads better than separators. Building and indexing these structures is covered in list of lists in Python.

Ways to print a list without brackets compared

MethodReturnsNon-strings OK?Best for
print(*lst, sep=", ")Nothing (prints)YesQuick console output
", ".join(lst)A stringNo, strings onlyText you’ll reuse
", ".join(map(str, lst))A stringYesNumbers and IDs
str(lst)[1:-1]A stringYes, but quotes stayNumber lists only
Loop with print(*row)Nothing (prints)YesLists of lists

Once the brackets are gone, these four list tutorials make good follow-ups:

Frequently asked questions

How do I print a list without brackets in Python?

Use print(*my_list). Add sep=", " or any other separator to control what goes between items.

How do I print a list without brackets and commas?

print(*my_list) already uses spaces. For a string, use " ".join(map(str, my_list)).

Why does join() raise a TypeError on my list?

join() accepts only strings. Convert the items first with map(str, my_list) or a generator expression.

How do I print each list item on its own line?

Use print(*my_list, sep="\n"), or "\n".join(map(str, my_list)) when you need the string.

How do I remove brackets from a list of lists?

Loop over the outer list and unpack each row: for row in data: print(*row).

Where are print()’s sep and end arguments documented?

See print() in the Python docs.