How to Set Multiple Values of a List in Python
Suppose we want to simultaneously set multiple elements of a Python list.
arr = [0, 0, 0, 0, 0]
Using a for
Loop
We could very well use a conventional for
loop.
for i in range(0, 3):
arr[i] = 1
# [1, 1, 1, 0, 0]
Using Slice Assignments
We can also assign a portion of the list to another list.
To obtain a portion of the list, we can use the slice operator.
arr[0:3] = [1] * 3
# [1, 1, 1, 0, 0]
arr[0:3] = [0 for i in range(3)]
# [0, 0, 0, 0, 0]
Check the Lengths!
Ensure that the length of both lists are equal, or we could end up in one of these situations.
arr[0:3] = [1] * 6
# [1, 1, 1, 1, 1, 1, 0, 0]
The specified portion of the left-hand list will be replaced, but the remainder of the right-hand list will still be inserted.
Watch Out for References
If we want to fill a list with objects, we can do so following the same method. However, these objects are populated in the list by reference.
obj = {'key': 1}
arr[0:3] = [obj] * 3
# [{'key': 1}, {'key': 1}, {'key': 1}, 0, 0]
arr[0]['key'] = 5
# [{'key': 5}, {'key': 5}, {'key': 5}, 0, 0]
We can bypass this complication by forcing a shallow copy of each object using the copy()
method.
obj = {'key': 1}
arr[0:3] = [x.copy() for x in [obj] * 3]
arr[0]['key'] = 5
# [{'key': 5}, {'key': 1}, {'key': 1}, 0, 0]