0

I have a list of objects list and a list of indexes indexes and I want to create a new_list containing objects of the original list at indexes defined this list of indexes.
I tried several ways but couldn't do that.
For example if there are only 2 indexes in indexes list why the following doesn't work?
new_list = [list[indexes[0]] + list[indexes[1]]]
Will be happy to know the general way resolving this issue, for any length of indexes list.

Prophet
  • 32,350
  • 22
  • 54
  • 79
  • If you want to process the list elements separately use zip(list1,list2) – bigbounty Mar 04 '18 at 15:42
  • sacul's solution will work, but the problem with what you have is that you are adding objects of you list rather than lists. it's confusing because you are using a variable 'list', which is the name of the python function for creating lists. if your list object was called L, you could do list([L[indexes[0]]]) + list([L[indexes[1]]]) and it would work. But don't do that. sacul's solution is *the* way to do it. – grovkin Mar 04 '18 at 15:44

1 Answers1

3

The following works:

my_list=['a','b','c','d']
my_indices=[1, 3]

new_list = [my_list[i] for i in my_indices if i < len(my_list)]

The above list comprehension will get all elements of my_list at the indices in my_indices. The if is there so that you don't get a IndexError: list index out of range error.

Your problem was that you were using the + operator, which concatenates your objects:

>>> [my_list[my_indices[0]] + my_list[my_indices[1]]]
['bd']
sacuL
  • 49,704
  • 8
  • 81
  • 106