Python Forum
Change type of elements in a list by column
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Change type of elements in a list by column
#1
Hi,

say I have the following list:

myList = [['john', '1', '2:00pm'], ['becky', '2', '3:15pm'], ['tom', '3', '3:20pm']]

the type of every elements in the inner list is string. How do I change (or what is the pythonic way) to change
the type of the 2nd element in the inner list to integer and the 3rd element to date.time?

Thank you!
Reply
#2
What have you tried?
Reply
#3
I tried the following codes but didn't get the result that I wanted.

myList_chg = [int(x[1]) for x in myList]
>>>myList_chg
Output:
[1, 2, 3]
myList_chg_2 = [myList[0], int(x[1]) for x in myList, myList[2]]
Error:
SyntaxError: invalid syntax
I wanted to access the 2nd elements of the inner list using the following code but it retrieved the following instead:

>>> myList[:][0]
Output:
['john', '1', '2:00pm']
Reply
#4
>>> for i in myList:
...     print i[1]
... 
1
2
3
>>> 
"As they say in Mexico 'dosvidaniya'. That makes two vidaniyas."
https://freedns.afraid.org
Reply
#5
import sys

myList = [['john', '1', '2:00pm'], ['becky', '2', '3:15pm'], ['tom', '3', '3:20pm']]

def get_myList_item(row=0, column=0):
    try:
        # Python 3.6.0
        print(f'row: {row}, column: {column} contains {myList[row][column]}')
        # other python:
        print('row: {}, column: {} contains {}'.format(row, column, myList[row][column]))
    except:
        print("Unexpected exception:", sys.exc_info()[0])

if __name__ == '__main__':
    get_myList_item(row=1,column=0)
result:
Output:
row: 1, column: 0 contains becky
Reply
#6
Here a hint for integer convert.
>>> my_list = [['john', '1', '2:00pm'], ['becky', '2', '3:15pm'], ['tom', '3', '3:20pm']]
>>> [[int(x) for x in lst] for lst in my_list]
Error:
Traceback (most recent call last):  File "<string>", line 301, in runcode  File "<interactive input>", line 1, in <module>  File "<interactive input>", line 1, in <listcomp>  File "<interactive input>", line 1, in <listcomp> ValueError: invalid literal for int() with base 10: 'john
Now it try to convert all element in the nested list.
Can wirte a helper function that catch ValueError
def try_int(x):
    try:
        return int(x)
    except ValueError:
        return x
Now try again:
>>> [[try_int(x) for x in lst] for lst in my_list]
[['john', 1, '2:00pm'], ['becky', 2, '3:15pm'], ['tom', 3, '3:20pm']]
Quote:3rd element to date.time?
Do you know how to this,like with only 1 value '3:20pm'?
Reply
#7
Apologies, I tried to reply to this last night but my internet was having issues.

Here's something close to what you want
newList = [(name, int(num), f(time)) for (name, num, time) in myList]
where f() is whatever conversion you want for time.

I believe this is preferable over mutating things in-place, as a general habit, but if memory is a concern, you could write a loop over myList in which for each sublist, you use indexes to replace the values with their relative modifications.
Reply
#8
(Dec-28-2016, 07:54 PM)micseydel Wrote: Apologies, I tried to reply to this last night but my internet was having issues.

Here's something close to what you want
newList = [(name, int(num), f(time)) for (name, num, time) in myList]
where f() is whatever conversion you want for time.

I believe this is preferable over mutating things in-place, as a general habit, but if memory is a concern, you could write a loop over myList in which for each sublist, you use indexes to replace the values with their relative modifications.

Thank you!
it works
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  unable to remove all elements from list based on a condition sg_python 3 377 Jan-27-2024, 04:03 PM
Last Post: deanhystad
Question mypy unable to analyse types of tuple elements in a list comprehension tomciodev 1 427 Oct-17-2023, 09:46 AM
Last Post: tomciodev
  Change font in a list or tuple apffal 4 2,635 Jun-16-2023, 02:55 AM
Last Post: schriftartenio
  Checking if a string contains all or any elements of a list k1llcod3 1 1,023 Jan-29-2023, 04:34 AM
Last Post: deanhystad
  How to change the datatype of list elements? mHosseinDS86 9 1,910 Aug-24-2022, 05:26 PM
Last Post: deanhystad
  search a list or tuple for a specific type ot class Skaperen 8 1,854 Jul-22-2022, 10:29 PM
Last Post: Skaperen
  find some word in text list file and a bit change to them RolanRoll 3 1,482 Jun-27-2022, 01:36 AM
Last Post: RolanRoll
  ValueError: Length mismatch: Expected axis has 8 elements, new values have 1 elements ilknurg 1 5,013 May-17-2022, 11:38 AM
Last Post: Larz60+
Question Change elements of array based on position of input data Cola_Reb 6 2,063 May-13-2022, 12:57 PM
Last Post: Cola_Reb
  TypeError: unsupported opperand type(s) for %: 'int' and 'list' cool_person 7 2,096 May-07-2022, 08:40 AM
Last Post: ibreeden

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020