How to replace values ​​using list comprehension in python3?

I was wondering how you can replace list values ​​using list comprehension. eg

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 to a list comprehension format.

+5
source share
3 answers

You can simply understand the nested list:

 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]] 
+3
source

Code:

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

Security 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 literally replace the elements in newList based on the 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]] 
+1
source
 def f(a, b): print(a, b) return 'hey' if a % 2 == 0 else b newList = [[f(a, b) for a, b in zip(r1, r2)] for r1, r2 in zip(theList, newList)] 
0
source

Source: https://habr.com/ru/post/1275367/


All Articles