Python Forum
reverse list, incl. nested list - 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: reverse list, incl. nested list (/thread-17924.html)



reverse list, incl. nested list - Livne_ye - Apr-29-2019

I am trying to write a code which will generate a nested list and the main list in a reverse order:
1.my_third_list = ["WHAT","IS","THIS",["a nested list", 3, 8, 4.00]]

meaning, once i print the code, the output that i want to see is:
[4.0, 8, 3, 'a nested list'],'THIS', 'IS', 'WHAT']
the command that i wrote for this:
2.print(my_third_list[:[[3][::-1]]:-1])
but instead of the wanted output, i get this type error:
TypeError: slice indices must be integers or None or have an __index__ method

why does it happen? did i write the command wrong? how can I fix this?

thanks for helping

have a great day


RE: reverse list, incl. nested list - buran - Apr-29-2019

Maybe you need to refresh on slicing and indexing. This [:[[3][::-1]]:-1] could not possibly work. It's not even clear what you try to do.
in more broad sense - you need to iterate over element in the list and if it is a list - reverse also the element. Now ehere comes the question - elements of what type you will get and need to reverse. i.e. you don't reverse sting elements, would you reverse tuples for example?


RE: reverse list, incl. nested list - perfringo - Apr-29-2019

For general purpose solution recursion seems suitable. However, in case of one level deep and only lists then oneliner will do ("for every element in reverse ordered list give me reverse ordered element if element is list otherwise element itself"):

>>> lst = ["WHAT","IS","THIS",["a nested list", 3, 8, 4.00]]
>>> [list(reversed(el)) if isinstance(el, list) else el for el in reversed(lst)]
[[4.0, 8, 3, 'a nested list'], 'THIS', 'IS', 'WHAT']



RE: reverse list, incl. nested list - Livne_ye - May-04-2019

(Apr-29-2019, 04:00 PM)perfringo Wrote: For general purpose solution recursion seems suitable. However, in case of one level deep and only lists then oneliner will do ("for every element in reverse ordered list give me reverse ordered element if element is list otherwise element itself"):

>>> lst = ["WHAT","IS","THIS",["a nested list", 3, 8, 4.00]]
>>> [list(reversed(el)) if isinstance(el, list) else el for el in reversed(lst)]
[[4.0, 8, 3, 'a nested list'], 'THIS', 'IS', 'WHAT']

Thanks pal
I think that will solve the problem