DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on • Edited on

List in Python (2)

Buy Me a Coffee

*Memos:

  • My post explains a list and the list with indexing.
  • My post explains the useful functions for a list (1).
  • My post explains the useful functions for a list (2).
  • My post explains variable assignment.
  • My post explains shallow copy and deep copy.

You can access and change a list by slicing as shown below:
*Memos:

  • A list is mutable.
  • Slicing can be done with one or more [start:end:step].
  • start(Optional-Default:The index of the 1st element).
  • end(Optional-Default:The index of the last element - 1).
  • step(Optional-Default:1). *step mustn't be zero.
  • The [] with at least one : is slicing.
  • Slicing does shallow copy.
  • An iterable must be assigned to a sliced variable.
v1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] # 1D list

print(v1[:])
print(v1[::])
# ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

print(v1[::2])
# ['a', 'c', 'e', 'g']

print(v1[::-2])
# ['h', 'f', 'd', 'b']

print(v1[2:])
print(v1[-6:])
print(v1[2::])
print(v1[-6::])
# ['c', 'd', 'e', 'f', 'g', 'h']

print(v1[2::2])
print(v1[-6::2])
# ['c', 'e', 'g']

print(v1[2::-2])
print(v1[-6::-2])
# ['c', 'a']

print(v1[:6])
print(v1[:-2])
print(v1[:6:])
print(v1[:-2:])
# ['a', 'b', 'c', 'd', 'e', 'f']

print(v1[:6:2])
print(v1[:-2:2])
# ['a', 'c', 'e']

print(v1[:6:-2])
print(v1[:-2:-2])
# ['h']

print(v1[2:6])
print(v1[-6:-2])
print(v1[2:6:])
print(v1[-6:-2:])
# ['c', 'd', 'e', 'f']

print(v1[2:6:2])
print(v1[-6:-2:2])
# ['c', 'e']

print(v1[2:6:-2])
print(v1[-6:-2:-2])
# []

v2 = v1[:]
v2[2:6] = [0, 1, 2, 3, 4, 5]
print(v2) # ['a', 'b', 0, 1, 2, 3, 4, 5, 'g', 'h']

v2 = v1[:]
v2[2:6] = [[0, 1, 2, 3, 4, 5]]
print(v2) # ['a', 'b', [0, 1, 2, 3, 4, 5], 'g', 'h']

v2 = v1[:]
v2[2:6:2] = [0, 1]
print(v2) # ['a', 'b', 0, 'd', 1, 'f', 'g', 'h']

v2 = v1[:]
v2[2:6:2] = [[0, 1, 2], [3, 4, 5]]
print(v2) # ['a', 'b', [0, 1, 2], 'd', [3, 4, 5], 'f', 'g', 'h']

v2 = v1[:]
v2[2:6] = 0 # TypeError: must assign iterable to extended slice
Enter fullscreen mode Exit fullscreen mode
v1 = [['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h']] # 2D list

print(v1[:])
print(v1[::])
print(v1[:][:])
print(v1[::][::])
# [['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h']]

print(v1[0][:])
print(v1[0][::])
print(v1[-2][:])
print(v1[-2][::])
# ['a', 'b', 'c', 'd']

print(v1[0][::2])
print(v1[-2][::2])
# ['a', 'c']

print(v1[0][::-2])
print(v1[-2][::-2])
# ['d', 'b']

print(v1[1][:])
print(v1[1][::])
print(v1[-1][:])
print(v1[-1][::])
# ['e', 'f', 'g', 'h']

print(v1[1][::2])
print(v1[-1][::2])
# ['e', 'g']

print(v1[1][::-2])
print(v1[-1][::-2])
# ['h', 'f']

v2 = v1[:]
v2[0][1:3] = [0, 1, 2, 3]
v2[1][::2] = [0, 1]
print(v2) # [['a', 0, 1, 2, 3, 'd'], [0, 'f', 1, 'h']]

v2 = v1[:]
v2[0][1:3] = [[0, 1, 2, 3]]
v2[1][::2] = [[0, 1, 2, 3], [0, 1, 2, 3]]
print(v2) # [['a', [0, 1, 2, 3], 'd'], [[0, 1, 2, 3], 'f', [0, 1, 2, 3], 'h']]
Enter fullscreen mode Exit fullscreen mode
v1 = [[['a', 'b'], ['c', 'd']], [['e', 'f'], ['g', 'h']]] # 3D list

print(v1[:])
print(v1[::])
print(v1[:][:])
print(v1[::][::])
print(v1[:][:][:])
print(v1[::][::][::])
# [[['a', 'b'], ['c', 'd']], [['e', 'f'], ['g', 'h']]]

print(v1[0][:])
print(v1[0][::])
print(v1[-2][:])
print(v1[-2][::])
# [['a', 'b'], ['c', 'd']]

print(v1[1][:])
print(v1[1][::])
print(v1[-1][:])
print(v1[-1][::])
# [['e', 'f'], ['g', 'h']]

print(v1[0][0][:])
print(v1[0][0][::])
print(v1[-2][-2][:])
print(v1[-2][-2][::])
# ['a', 'b']

print(v1[0][0][::2])
print(v1[-2][-2][::2])
# ['a']

print(v1[0][0][::-2])
print(v1[-2][-2][::-2])
# ['b']

print(v1[0][1][:])
print(v1[0][1][::])
print(v1[-2][-1][:])
print(v1[-2][-1][::])
# ['c', 'd']

print(v1[0][1][::2])
print(v1[-2][-1][::2])
# ['c']

print(v1[0][1][::-2])
print(v1[-2][-1][::-2])
# ['d']

print(v1[1][0][:])
print(v1[1][0][::])
print(v1[-1][-2][:])
print(v1[-1][-2][::])
# ['e', 'f']

print(v1[1][0][::2])
print(v1[-1][-2][::2])
# ['e']

print(v1[1][0][::-2])
print(v1[-1][-2][::-2])
# ['f']

print(v1[1][1][:])
print(v1[1][1][::])
print(v1[-1][-1][:])
print(v1[-1][-1][::])
# ['g', 'h']

print(v1[1][1][::2])
print(v1[-1][-1][::2])
# ['g']

print(v1[1][1][::-2])
print(v1[-1][-1][::-2])
# ['h']

v2 = v1[:]
v2[0][1:] = [0, 1, 2, 3]
v2[1][0][0:] = [0, 1, 2, 3]
v2[1][1][::2] = [[0, 1, 2, 3]]
print(v2) # [[['a', 'b'], 0, 1, 2, 3], [[0, 1, 2, 3], [[0, 1, 2, 3], 'h']]]
Enter fullscreen mode Exit fullscreen mode

The variables v1 and v2 refer to the same list unless copied as shown below:

*Memos:

  • is keyword can check if v1 and v2 refer to the same list.
  • Again, slicing does shallow copy.
  • copy() can also do shallow copy. *There are no arguments.
  • deepcopy() can do deep copy. *There are no arguments.
  • deepcopy() should be used because it's safe, doing copy deeply while copy() isn't safe, doing copy shallowly.
from copy import deepcopy

v1 = ['a', 'b', 'c', 'd']

v2 = v1 # v2 refers to the same list as v1.

v2[2] = 'X' # Changes the same list as v1.
                     # ↓↓↓
print(v1) # ['a', 'b', 'X', 'd']
print(v2) # ['a', 'b', 'X', 'd'] 
                     # ↑↑↑
print(v1 is v2) # True

v2 = v1[:]         # v2 refers to the different list from v1.
v2 = v1.copy()
v2 = deepcopy(v1)

v2[2] = 'Y' # Changes the different list from v1.
                     # ↓↓↓
print(v1) # ['a', 'b', 'X', 'd']
print(v2) # ['a', 'b', 'Y', 'd']
                     # ↑↑↑
print(v1 is v2) # False
Enter fullscreen mode Exit fullscreen mode

Top comments (0)