Python 2D List: Create, Access and Modify Rows and Columns


A Python 2D list is a list containing other lists as its elements. The inner lists can represent rows, while the values inside each row can represent columns.

For example, a 2D list can store data in a table-like or matrix-like structure. Python lists do not require every row to have the same length, although matrix-style data usually uses rows of equal length.

For large numerical matrix operations, libraries such as NumPy are usually more suitable. A Pandas DataFrame is useful when working with labeled tabular data. However, standard Python lists are useful for learning and for many smaller tasks.

Creating a 2D List 🔝

We can create a 2D list by placing several lists inside another list.

my_list=[
    [1, 0, 0, 4, 6],
    [3, 9, 8, 0, 0],
    [3, 9, 1, 1, 5],
    [0, 9, 3, 0, 8],
    [8, 6, 1, 9, 7]
]

This example contains five rows. Each row contains five elements.

Displaying Rows of a 2D List 🔝

A for loop can read and display each inner list as one row.

my_list=[
    [1, 0, 0, 4, 6],
    [3, 9, 8, 0, 0],
    [3, 9, 1, 1, 5],
    [0, 9, 3, 0, 8],
    [8, 6, 1, 9, 7]
]

for row in my_list:
    print(row)
Output
[1, 0, 0, 4, 6]
[3, 9, 8, 0, 0]
[3, 9, 1, 1, 5]
[0, 9, 3, 0, 8]
[8, 6, 1, 9, 7]

Accessing an Individual Element 🔝

Two indexes are used to access an individual element. The first index selects the row, and the second index selects the element inside that row.

print(my_list[3][4])
Output
8

Here, my_list[3] selects the fourth row because indexing starts from 0. The second index, [4], selects the fifth element of that row.

Accessing a Row 🔝

A single index returns one complete row.

print(my_list[2])
Output
[3, 9, 1, 1, 5]

Index 2 selects the third row.

Accessing a Column 🔝

To collect one column, we can read the same index from every row.

The following example reads index 3, which represents the fourth column.

column=[]

for row in my_list:
    column.append(row[3])

print(column)
Output
[4, 0, 1, 0, 9]

The same result can be created using list comprehension.

column=[row[3] for row in my_list]

print(column)
Output
[4, 0, 1, 0, 9]

Displaying All Elements 🔝

Nested loops can access every individual element of a 2D list.

my_list=[
    ['abc', 'def', 'ghi', 'jkl'],
    ['mno', 'pkr', 'frt', 'qwr'],
    ['asd', 'air', 'abc', 'zpq'],
    ['zae', 'vbg', 'qir', 'zab']
]

for row in my_list:
    for item in row:
        print(item, end=' ')
    print()
Output
abc def ghi jkl
mno pkr frt qwr
asd air abc zpq
zae vbg qir zab

The outer loop reads one row at a time. The inner loop reads each element from that row.

Changing an Element 🔝

Python lists are mutable, so an existing value inside a 2D list can be changed using its row and column indexes.

my_list=[
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

my_list[1][2]=50

print(my_list)
Output
[[1, 2, 3], [4, 5, 50], [7, 8, 9]]

The value at the second row and third column is changed from 6 to 50.

Adding a Row 🔝

A new row can be added using the append() method.

my_list=[
    [1, 2, 3],
    [4, 5, 6]
]

my_list.append([7, 8, 9])

print(my_list)
Output
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

The complete list [7, 8, 9] becomes a new row.

Adding a Column 🔝

To add a new column, add one value to each existing row.

my_list=[
    [1, 2],
    [3, 4],
    [5, 6]
]

for row in my_list:
    row.append(0)

print(my_list)
Output
[[1, 2, 0], [3, 4, 0], [5, 6, 0]]

Each call to append(0) adds one new element to the end of a row, creating a new column.

Deleting a Row 🔝

The pop() method can remove a row by its index.

my_list=[
    [1, 0, 0, 4, 6],
    [3, 9, 8, 0, 0],
    [3, 9, 1, 1, 5],
    [0, 9, 3, 0, 8],
    [8, 6, 1, 9, 7]
]

my_list.pop(2)

print(my_list)
Output
[[1, 0, 0, 4, 6], [3, 9, 8, 0, 0], [0, 9, 3, 0, 8], [8, 6, 1, 9, 7]]

Index 2 represents the third row because list indexes start from 0.

Deleting a Column 🔝

To delete a complete column, remove the element at the same index from every row.

The following example removes index 3, which represents the fourth column.

my_list=[
    [1, 0, 0, 4, 6],
    [3, 9, 8, 0, 0],
    [3, 9, 1, 1, 5],
    [0, 9, 3, 0, 8],
    [8, 6, 1, 9, 7]
]

for row in my_list:
    row.pop(3)

print(my_list)
Output
[[1, 0, 0, 6], [3, 9, 8, 0], [3, 9, 1, 5], [0, 9, 3, 8], [8, 6, 1, 7]]

A regular loop is clearer here because pop() is being used to modify each row.

Avoid Shared Row References 🔝

When creating a 2D list with repeated values, avoid multiplying a list containing another mutable list.

For example:

my_list=[[0] * 3] * 3

my_list[0][0]=9

print(my_list)
Output
[[9, 0, 0], [9, 0, 0], [9, 0, 0]]

All three positions changed because the outer list contains references to the same inner list.

Create each row separately using list comprehension instead.

my_list=[[0] * 3 for _ in range(3)]

my_list[0][0]=9

print(my_list)
Output
[[9, 0, 0], [0, 0, 0], [0, 0, 0]]

Now each row is an independent list.

Creating a 2D List with Random Numbers 🔝

We can create a square 2D list using random numbers. In this example, n controls the number of rows and columns.

from random import randrange

n=5
my_list=[]

for i in range(n):
    row=[]

    for j in range(n):
        row.append(randrange(10))

    my_list.append(row)

for row in my_list:
    print(row)
Sample Output
[5, 1, 7, 6, 6]
[9, 0, 1, 1, 2]
[9, 2, 2, 7, 4]
[6, 2, 6, 9, 6]
[7, 1, 6, 4, 5]

The output changes each time the program runs because randrange(10) generates values from 0 through 9.

Using List Comprehension

The same 2D list can also be created using nested list comprehension.

from random import randrange

n=5

my_list=[
    [randrange(10) for j in range(n)]
    for i in range(n)
]

for row in my_list:
    print(row)

Transpose of a 2D List 🔝

The transpose changes rows into columns and columns into rows.

We can use zip() with the unpacking operator * to transpose a rectangular 2D list.

my_list=[
    [1, 2],
    [3, 4],
    [5, 6]
]

transposed=[
    list(row)
    for row in zip(*my_list)
]

print(transposed)
Output
[[1, 3, 5], [2, 4, 6]]

The first column becomes the first row, and the second column becomes the second row.

Sum of Diagonal Elements 🔝

For a square 2D list, the main diagonal contains elements where the row index and column index are the same.

my_list=[
    [1, 0, 0, 4, 6],
    [3, 9, 8, 0, 0],
    [3, 9, 1, 1, 5],
    [0, 9, 3, 0, 8],
    [8, 6, 1, 9, 7]
]

n=len(my_list)

main_diagonal=sum(
    my_list[i][i]
    for i in range(n)
)

print(main_diagonal)
Output
18

The main diagonal values are 1, 9, 1, 0, and 7.

Their sum is:

1 + 9 + 1 + 0 + 7 = 18

Sum of the Secondary Diagonal

The secondary diagonal runs from the top-right corner to the bottom-left corner.

secondary_diagonal=sum(
    my_list[i][n-1-i]
    for i in range(n)
)

print(secondary_diagonal)
Output
24

The secondary diagonal values are 6, 0, 1, 9, and 8.

Their sum is:

6 + 0 + 1 + 9 + 8 = 24

Read more about the sum() function.

Summary of Python 2D Lists 🔝

  • A 2D list is a list containing other lists.
  • The first index selects a row and the second index selects an element inside that row.
  • Rows can be read directly using one index.
  • A column can be collected by reading the same index from each row.
  • Nested loops can access every individual element.
  • Elements can be changed using my_list[row][column].
  • Use append() to add rows or new elements to each row.
  • Use pop() to remove rows or column elements.
  • Avoid [[0] * n] * n when independent rows are required.
  • zip(*my_list) can transpose a rectangular 2D list.
  • The sum() function can calculate diagonal totals of a square matrix-like list.
Python List Matrix Multiplication append() pop()




Subscribe to our YouTube Channel here



plus2net.com







Python Video Tutorials
Python SQLite Video Tutorials
Python MySQL Video Tutorials
Python Tkinter Video Tutorials
We use cookies to improve your browsing experience. . Learn more
HTML MySQL PHP JavaScript ASP Photoshop Articles Contact us
©2000-2026   plus2net.com   All rights reserved worldwide Privacy Policy Disclaimer