For loop syntax in Python without using range() or xrange()
Asked Answered
H

3

7

I do not know much about python so i apologize if my question is a very basic one.

Let's say i have a list

lst = [1,2,3,4,5,6,7,8,9,10]

Now what i want to know is that if there is any way to write the following piece of code in python without using range() or xrange():

for i in lst:
    for j in lst after element i: '''This is the line i want the syntax for'''
        #Do Something

The second loop is to access elements after the element i i.e., if i = 3, j would have to loop through from 4 to 10, so the pairs of numbers if i and j are printed would be (1,2)..(1,10), (2,3)...(2,10), (3,4)..(3,10) etc.

I have no idea what to search for or what query to type on any search engine.
Any help would be much appreciated.

Houlihan answered 17/11, 2015 at 14:34 Comment(6)
Possible duplicate of Iterate over pairs in a list (circular fashion) in Python. Do you want to iterate with the indices (0, 1), (1, 2), (2, 3) or (0, 1), (2, 3), (4, 5)?Proteiform
Also is there a particular reason you don't want to use range? Is it for the sake of challenge/curiosity or something else?Proteiform
@Proteiform It was just out of curiosity nothing more.Houlihan
@Proteiform No i want to iterate with (0,1)...(0,10), then (1,2)...(1,10), then (2,3)..(2,10), this sort of looping.Houlihan
Ah, apologies. The link may be helpful but it's not a duplicate then.Proteiform
@Proteiform Not a problem. It's always better to have more knowledge :) Thank you for the link!Houlihan
N
8

This is what list slicing is about, you can take part of your list from i'th element through

lst[i:]

furthermore, in order to have both index and value you need enumerate operation, which changes the list into list of pairs (index, value)

thus

for ind, i in enumerate(lst):
    for j in lst[ind+1: ]: 
        #Do Something
Neysa answered 17/11, 2015 at 14:38 Comment(1)
Thank you list slicing is the answer i was looking for!Houlihan
S
7

It looks like you might want to use enumerate():

for index, item in enumerate(lst):
    for j in lst[index+1:]:
        #Do Something
Severn answered 17/11, 2015 at 14:37 Comment(4)
lst[index+1] is not a list, it is an element, furthermore, enumerate does not work this way aroundNeysa
Also, I get the order of index and item in enumerate wrong every time I try to use it. It's like trying to get a USB in on the first try...Severn
@Severn does that also mean that sometimes you get the order right but it still doesn't work so you reflexively try the other way?Suavity
I learned something new from your answer. I really appreciate it!Houlihan
I
0

can't we do it like simply:

for i in range(len(lst)):  
     for j in lst[i+1:]:  
        #Do Something
Ivett answered 25/10, 2023 at 19:35 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.