Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to replace values using list comprehension in python3?

I was wondering how would you can replace values of a list using list comprehension. e.g.

theList = [[1,2,3],[4,5,6],[7,8,9]]
newList = [[1,2,3],[4,5,6],[7,8,9]]
for i in range(len(theList)):
  for j in range(len(theList)):
    if theList[i][j] % 2 == 0:
      newList[i][j] = 'hey'

I want to know how I could convert this into the list comprehension format.

like image 581
user8802333 Avatar asked Feb 15 '18 03:02

user8802333


2 Answers

You can just do a nested list comprehension:

theList = [[1,2,3],[4,5,6],[7,8,9]]
[[x if x % 2 else 'hey' for x in sl] for sl in theList]

returns

[[1, 'hey', 3], ['hey', 5, 'hey'], [7, 'hey', 9]]
like image 160
Alex Avatar answered Oct 14 '22 13:10

Alex


Code:

new_list2 = [["hey" if x %2 == 0 else x for x in row]
             for row in theList]

Test Code:

theList = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
newList = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for i in range(len(theList)):
    for j in range(len(theList)):
        if theList[i][j] % 2 == 0:
            newList[i][j] = "hey'ere"


new_list2 = [["hey'ere" if x %2 == 0 else x for x in row]
             for row in theList]

assert newList == new_list2

Or...

Or if you are literally replacing items in newList based on values in theList you can do:

newList = [[10, 20, 30], [40, 50, 60], [70, 80, 90]]
newList[:] = [["hey" if x % 2 == 0 else y for x, y in zip(row1, row2)]
              for row1, row2 in zip(theList, newList)]

print(newList)

Results:

[[10, 'hey', 30], ['hey', 50, 'hey'], [70, 'hey', 90]]
like image 32
Stephen Rauch Avatar answered Oct 14 '22 13:10

Stephen Rauch