Python Forum

Full Version: reverse list, incl. nested list
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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
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?
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']
(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