FurtiveFelon
FurtiveFelon

Reputation: 15156

How to slice a list from an element n to the end in python?

I'm having some trouble figuring out how to slice python lists, it is illustrated as follows:

>>> test = range(10)
>>> test
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> test[3:-1]
[3, 4, 5, 6, 7, 8]
>>> test[3:0]
[]
>>> test[3:1]
[]
>>> test
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

To my understanding, python slice means lst[start:end], and including start, excluding end. So how would i go about finding the "rest" of a list starting from an element n?

Thanks a lot for all your help!

Upvotes: 87

Views: 195417

Answers (7)

GreenTurtle
GreenTurtle

Reputation: 880

Return a slice of the list after a starting value:

my_list = ['a','b','c','d']
start_from = 'b' # value you want to start with
slice = my_list[my_list.index(start_from):] # returns slice from starting value to end

Upvotes: 3

Otieno Rowland
Otieno Rowland

Reputation: 2250

What you are looking for is to use something like:

inputs = "ababbbaAab"
for i in range(n):
    print(i, inputs[:i] + inputs[i:i+1])

The output:

0 a
1 ab
2 aba
3 abab
4 ababb
5 ababbb
6 ababbba
7 ababbbaA
8 ababbbaAa
9 ababbbaAab

See that if i == 0

then inputs[:i] == [] and inputs[i:i+1] == a

and if i == len(inputs) - 1

then inputs[:i] == [ababbbaAa] and inputs[i:i+1] == b

Upvotes: 1

kmario23
kmario23

Reputation: 61325

You can also use the None keyword for the end parameter when slicing. This would also return the elements till the end of the list (or any sequence such as tuple, string, etc.)

# for list
In [20]: list_ = list(range(10))    
In [21]: list_[3:None]
Out[21]: [3, 4, 5, 6, 7, 8, 9]

# for string
In [22]: string = 'mario'
In [23]: string[2:None]
Out[23]: 'rio'

# for tuple
In [24]: tuple_ = ('Rose', 'red', 'orange', 'pink', 23, [23, 'number'], 12.0)
In [25]: tuple_[3:None]
Out[25]: ('pink', 23, [23, 'number'], 12.0)

Upvotes: 3

Doug Bradshaw
Doug Bradshaw

Reputation: 1592

Leaving out the end still works when you want to skip some:

range(10)[3::2] => [3, 5, 7, 9]

Upvotes: 5

recursive
recursive

Reputation: 86064

If you're using a variable as the range endpoint, you can use None.

 start = 4
 end = None
 test[start:end]

Upvotes: 137

Angela
Angela

Reputation: 3110

You can leave one end of the slice open by not specifying the value.

test[3:] = [3, 4, 5, 6, 7, 8, 9]
test[:3] = [0, 1, 2]

Upvotes: 129

Matthew
Matthew

Reputation: 1875

Simply omit the end.

test[n:]

Upvotes: 21

Related Questions