50

I'm new to python and I'm trying to scan multiple numbers separated by spaces (let's assume '1 2 3' as an example) in a single line and add it to a list of int. I did it by using:

#gets the string 
string = input('Input numbers: ') 
#converts the string into an array of int, excluding the whitespaces
array = [int(s) for s in string.split()] 

Apparently it works, since when I type in '1 2 3' and do a print(array) the output is:

[1, 2, 3]

But I want to print it in a single line without the brackets, and with a space in between the numbers, like this:

1 2 3

I've tried doing:

for i in array:
    print(array[i], end=" ")

But I get an error:

2 3 Traceback (most recent call last):

print(array[i], end=" ")

IndexError: list index out of range

How can I print the list of ints (assuming my first two lines of code are right) in a single line, and without the brackets and commas?

Community
  • 1
  • 1
KimioN42
  • 629
  • 1
  • 6
  • 10

11 Answers11

90

Yes that is possible in Python 3, just use * before the variable like:

print(*list)

This will print the list separated by spaces.

(where * is the unpacking operator that turns a list into positional arguments, print(*[1,2,3]) is the same as print(1,2,3), see also What does the star operator mean, in a function call?)

user2314737
  • 27,088
  • 20
  • 102
  • 114
Nikhil Gupta
  • 900
  • 6
  • 5
56

You want to say

for i in array:
    print(i, end=" ")

The syntax i in array iterates over each member of the list. So, array[i] was trying to access array[1], array[2], and array[3], but the last of these is out of bounds (array has indices 0, 1, and 2).

You can get the same effect with print(" ".join(map(str,array))).

Nick Matteo
  • 4,453
  • 1
  • 24
  • 35
22

Try using join on a str conversion of your ints:

print(' '.join(str(x) for x in array))

For python 3.7

21kc
  • 21
  • 6
EoinS
  • 5,405
  • 1
  • 19
  • 32
18

these will both work in Python 2.7 and Python 3.x:

>>> l = [1, 2, 3]
>>> print(' '.join(str(x) for x in l))
1 2 3
>>> print(' '.join(map(str, l)))
1 2 3

btw, array is a reserved word in Python.

Corey Goldberg
  • 59,062
  • 28
  • 129
  • 143
  • 1
    `array` is [not a reserved keyword](https://stackoverflow.com/questions/22864221/is-the-list-of-python-reserved-words-and-builtins-available-in-a-library) in Python, you're thinking of `list` or `bytearray` – Boris Verkhovskiy Apr 08 '19 at 17:44
  • The list comprehension `str(x) for x in l` is more pythonic than `map()`. `map()` [was almost removed from Python](https://www.artima.com/weblogs/viewpost.jsp?thread=98196) because you can always use a list comprehension instead. – Boris Verkhovskiy Apr 08 '19 at 17:48
9

You have multiple options, each with different general use cases.

The first would be to use a for loop, as you described, but in the following way.

for value in array:
    print(value, end=' ')

You could also use str.join for a simple, readable one-liner using comprehension. This method would be good for storing this value to a variable.

print(' '.join(str(value) for value in array))

My favorite method, however, would be to pass array as *args, with a sep of ' '. Note, however, that this method will only produce a printed output, not a value that may be stored to a variable.

print(*array, sep=' ')
2Cubed
  • 3,401
  • 7
  • 23
  • 40
  • for value in array: print(value, end=' ') in this situation if array contains 5 'items' message will appears 5 times just use print(*array) – Konstantin F Mar 17 '19 at 18:56
4

If you write

a = [1, 2, 3, 4, 5]
print(*a, sep = ',')

You get this output: 1,2,3,4,5

Corentin Pane
  • 4,794
  • 1
  • 12
  • 29
2
# Print In One Line Python

print('Enter Value')

n = int(input())

print(*range(1, n+1), sep="")
Suraj Rao
  • 29,388
  • 11
  • 94
  • 103
  • 2
    Using the star operator is a clever solution. Note, however, that the question actually uses an arbitrary list that is answered, whereas your answer uses a range from 1 to a single input. Also, you likely meant to use `sep=" "` rather than `sep=""` – Kjeld Schmidt Mar 04 '19 at 15:09
2
lstofGroups=[1,2,3,4,5,6,7,8,9,10]

print(*lstofGroups, sep = ',')

don't forget to put * before the List

0

For python 2.7 another trick is:

arr = [1,2,3]
for num in arr:
  print num,
# will print 1 2 3
elad silver
  • 9,222
  • 4
  • 43
  • 67
0

you can use more elements "end" in print:

for iValue in arr:
   print(iValue, end = ", ");
ManhKM
  • 41
  • 3
-1

Maybe this code will help you.

>>> def sort(lists):
...     lists.sort()
...     return lists
...
>>> datalist = [6,3,4,1,3,2,9]
>>> print(*sort(datalist), end=" ")
1 2 3 3 4 6 9

you can use an empty list variable to collect the user input, with method append(). and if you want to print list in one line you can use print(*list)

monti
  • 311
  • 2
  • 9