Converting list elements and sublists from int to str - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Converting list elements and sublists from int to str (/thread-16681.html) |
Converting list elements and sublists from int to str - iMuny - Mar-10-2019 Hello everyone, I'm new to python and currently stuck on a problem,I want to convert a list containing variable data types to strings while maintaining the original structure of the lists, for e.g. inputlist=['Cities',14,'WACC',(32,'KHI',208.55567),['Stat',14,'RS0']]Should become outputlist=['Cities','14','WACC',('32','KHI','208.55567'),['Stat','14','RS0']]Map doesn't work as it converts the inner tuples and lists to a complete string breaking the original structure. outputlist=list(map(str,inputlist))The lists are variable sized with changing internal structures and can be long containing thousands of elements with each element having the possibility of being a tuple or list itself. Any help would be greatly appreciated. RE: Converting list elements and sublists from int to str - Scorpio - Mar-10-2019 hi, you want to use the right method but not with the right way. for using map, the first item is a fonction type lambda. for using lambda, if "x" is your variable for iteration, you can do that : outputlist= list(map(lambda x: str(x), inputlist))hope this will be helpful. RE: Converting list elements and sublists from int to str - iMuny - Mar-10-2019 Thanks for the answer but there is still a little problem as you may have observed that the inner tuple and list get converted to a string, I only want their elements to get converted to strings not the whole tuple/list. Like a recursive function or something. Any help would be highly appreciated. RE: Converting list elements and sublists from int to str - perfringo - Mar-10-2019 Does "with changing internal structures" mean that list in not always one level deep as in "inputlist"? If list is only one level deep simple brute-force conversion should suffice. One possibility: >>> inputlist=['Cities',14,'WACC',(32,'KHI',208.55567),['Stat',14,'RS0']] >>> outputlist = list() >>> for el in inputlist: ... obj_type = type(el) ... if isinstance(el, (list, tuple)): # alternatively: if obj_type in [tuple, list]: ... outputlist.append([str(x) for x in el]) ... if obj_type == tuple: ... outputlist[-1] = obj_type(outputlist[-1]) ... else: ... outputlist.append(str(el)) ... >>> outputlist ['Cities', '14', 'WACC', ('32', 'KHI', '208.55567'), ['Stat', '14', 'RS0']] RE: Converting list elements and sublists from int to str - Yoriz - Mar-10-2019 A recursive version, be careful with dictionary keys. test_data = ['Cities', 14, 'WACC', (32, 'KHI', 208.55567), ['Stat', 14, 'RS0'], {'one': 1, 2: [1, 2], (1, 2, 3, 4): ('this', 'that', 10)}, {1, 2, (3.0, 3.5,), 4}] def all_strings(data): if type(data) == list: items = [] for item in data: items.append(all_strings(item)) return items elif type(data) == tuple: return tuple(all_strings(list(data))) elif type(data) == dict: new_dict = {} for key, value in data.items(): new_dict[all_strings(key)] = all_strings(value) return new_dict elif type(data) == set: return set(all_strings(list(data))) else: return str(data) print(all_strings(test_data))
RE: Converting list elements and sublists from int to str - iMuny - Mar-10-2019 Thankyou perfringo and yoriz your answers solved my problem, the list will be atmost one level deep in 95% of the cases, as such both answers are perfect. Thankyou for your help. |