Reputation: 354
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]]
Upvotes: 0
Views: 106
Reputation: 41
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]
Upvotes: 1
Reputation: 13929
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.
Upvotes: 1