Home > OS >  Converting list of lists of strings into integer in Python
Converting list of lists of strings into integer in Python

Time:01-31

I want to convert the string elements to integers within the each following list:

old = [['29,1,22,14,32,11,11,3'],
 ['2,3,1,2,1,4,1,1,3,1'],
 ['5,2,1,1,3,1,2,4,1,1,2,2,2,1,19,2,1,7'],
 ['2,2,1,5,6,1,2,3,9,2,1,1,2,6,1,1,2,3,1,1,2'],
 ['29,44,5,8,17,20,26,47,80,29,47,17,23,26,46,69,8,2,5,38,8,5,5']]

I have tried the following codes:

[[int(num) for num in sub] for sub in old]
[list(map(int, sublist)) for sublist in old]

These are not working in my case. I need the following outputs:

new = [[29,1,22,14,32,11,11,3],
 [2,3,1,2,1,4,1,1,3,1],
 [5,2,1,1,3,1,2,4,1,1,2,2,2,1,19,2,1,7],
 [2,2,1,5,6,1,2,3,9,2,1,1,2,6,1,1,2,3,1,1,2],
 [29,44,5,8,17,20,26,47,80,29,47,17,23,26,46,69,8,2,5,38,8,5,5]]

CodePudding user response:

Try:

old = [['29,1,22,14,32,11,11,3'],
 ['2,3,1,2,1,4,1,1,3,1'],
 ['5,2,1,1,3,1,2,4,1,1,2,2,2,1,19,2,1,7'],
 ['2,2,1,5,6,1,2,3,9,2,1,1,2,6,1,1,2,3,1,1,2'],
 ['29,44,5,8,17,20,26,47,80,29,47,17,23,26,46,69,8,2,5,38,8,5,5']]

new = [[int(x) for x in sublst[0].split(',')] for sublst in old]
# new = [list(map(int, sublst[0].split(','))) for sublst in old] # an alternative

print(new)
# [[29, 1, 22, 14, 32, 11, 11, 3], [2, 3, 1, 2, 1, 4, 1, 1, 3, 1], [5, 2, 1, 1, 3, 1, 2, 4, 1, 1, 2, 2, 2, 1, 19, 2, 1, 7], [2, 2, 1, 5, 6, 1, 2, 3, 9, 2, 1, 1, 2, 6, 1, 1, 2, 3, 1, 1, 2], [29, 44, 5, 8, 17, 20, 26, 47, 80, 29, 47, 17, 23, 26, 46, 69, 8, 2, 5, 38, 8, 5, 5]]

You need to use split to parse each long string into small strings, and then apply int to convert a string into an int.

CodePudding user response:

You have the right idea with both of the approaches you just didn't account for the seperator, i.e., the commas. As the numbers are separated by commas you need to split() them before converting to int

[[int(num) for num in sub[0].split(",")] for sub in old]

[list(map(int, sublist[0].split(","))) for sublist in old]
  •  Tags:  
  • Related