How do I get an empty list of any size in Python?

PythonArraysDynamic Arrays

Python Problem Overview


I basically want a Python equivalent of this Array in C:

int a[x];

but in python I declare an array like:

a = []

and the problem is I want to assign random slots with values like:

a[4] = 1

but I can't do that with Python, since the Python list is empty (of length 0).

Python Solutions


Solution 1 - Python

If by "array" you actually mean a Python list, you can use

a = [0] * 10

or

a = [None] * 10

Solution 2 - Python

You can't do exactly what you want in Python (if I read you correctly). You need to put values in for each element of the list (or as you called it, array).

But, try this:

a = [0 for x in range(N)]  # N = size of list you want
a[i] = 5  # as long as i < N, you're okay

For lists of other types, use something besides 0. None is often a good choice as well.

Solution 3 - Python

You can use numpy:

import numpy as np

Example from Empty Array:

np.empty([2, 2])
array([[ -9.74499359e+001,   6.69583040e-309],
       [  2.13182611e-314,   3.06959433e-309]])  

Solution 4 - Python

also you can extend that with extend method of list.

a= []
a.extend([None]*10)
a.extend([None]*20)

Solution 5 - Python

Just declare the list and append each element. For ex:

a = []
a.append('first item')
a.append('second item')

Solution 6 - Python

If you (or other searchers of this question) were actually interested in creating a contiguous array to fill with integers, consider bytearray and memoryivew:

# cast() is available starting Python 3.3
size = 10**6 
ints = memoryview(bytearray(size)).cast('i') 

ints.contiguous, ints.itemsize, ints.shape
# (True, 4, (250000,))

ints[0]
# 0

ints[0] = 16
ints[0]
# 16

Solution 7 - Python

x=[]
for i in range(0,5):
    x.append(i)
    print(x[i])

Solution 8 - Python

It is also possible to create an empty array with a certain size:

array = [[] for _ in range(n)] # n equal to your desired size
array[0].append(5) # it appends 5 to an empty list, then array[0] is [5]

if you define it as array = [] * n then if you modify one item, all are changed the same way, because of its mutability.

Solution 9 - Python

If you actually want a C-style array

import array
a = array.array('i', x * [0])
a[3] = 5
try:
   [5] = 'a'
except TypeError:
   print('integers only allowed')

Note that there's no concept of un-initialized variable in python. A variable is a name that is bound to a value, so that value must have something. In the example above the array is initialized with zeros.

However, this is uncommon in python, unless you actually need it for low-level stuff. In most cases, you are better-off using an empty list or empty numpy array, as other answers suggest.

Solution 10 - Python

The (I think only) way to assign "random slots" is to use a dictionary, e.g.:

 a = {}     # initialize empty dictionary
 a[4] = 1   # define the entry for index 4 to be equal to 1
 a['French','red'] = 'rouge'  # the entry for index (French,red) is "rouge".

This can be handy for "quick hacks", and the lookup overhead is irrelevant if you don't have intensive access to the array's elements. Otherwise, it will be more efficient to work with pre-allocated (e.g., numpy) arrays of fixed size, which you can create with a = np.empty(10) (for an non-initialized vector of length 10) or a = np.zeros([5,5]) for a 5x5 matrix initialized with zeros).

Remark: in your C example, you also have to allocate the array (your int a[x];) before assigning a (not so) "random slot" (namely, integer index between 0 and x-1).

References:

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser299648View Question on Stackoverflow
Solution 1 - PythonSven MarnachView Answer on Stackoverflow
Solution 2 - PythondappawitView Answer on Stackoverflow
Solution 3 - PythonDanielTheRocketManView Answer on Stackoverflow
Solution 4 - PythonPythoniView Answer on Stackoverflow
Solution 5 - PythonLyleView Answer on Stackoverflow
Solution 6 - PythonJayView Answer on Stackoverflow
Solution 7 - PythonAkshar PatelView Answer on Stackoverflow
Solution 8 - PythonarmiroView Answer on Stackoverflow
Solution 9 - Pythonblue_noteView Answer on Stackoverflow
Solution 10 - PythonMaxView Answer on Stackoverflow