Home > Software design >  Pythonic and fast way to create an array of values `[1, .., n]` that contain none of `[i_1, ..., i_r
Pythonic and fast way to create an array of values `[1, .., n]` that contain none of `[i_1, ..., i_r

Time:12-09

What is a fast and pythonic way to create a list from [1, ..., n] that contains none of the numbers [i_1, ..., i_r]. For example, running this function on [1, 2, 3, 4] and [2,3] should return [1, 4].

I am currently using a for loop to test "if i is in [1, ..., n], then exclude it from the output array, else include it".

Is there a better and more pythonic way?

CodePudding user response:

As a pythonic way you can go with :

n = 5
l = [k for k in range(1,n) if not k in [2,3] ]

Not sure about speed though.

CodePudding user response:

A pythonic and fast way to do it:

l = [k for k in range(1,n 1) if k < i_1 or k > i_r]

Note that this is O(n), while @Adrien Mau's answer is O(n²).

  • Related