On Tue, Apr 23, 2019 at 10:28:29AM -0700, Brett Cannon wrote: > Given "abcdefabcdefabcdef", what is the last result of "abc"? > x.rindex("abc") will tell you. > > Given [1, 2, 3, 4, 5, 1, 2, 3, 4, 5] where is the last result of 3? > reversed(x).index(3) will tell you (or x[::-1]).
That first version doesn't work, as list_reverseiterator objects don't have an index method. You're not the only person to make that error, I too often forget that reverse() returns an iterator, not a list. The second is easy to get wrong, because it returns the wrong index: # Get the item following the last instance of spam. index = x[::-1].index(spam) print(x[index+1]) In your example, the correct index is 7 but the returned value is 2. > Notice how with lists you can easily reverse them and still get at the > value since you are searching per index. "Easily" hides a lot of copying behind the scenes. If the list is a non-trivial size, that can be very wasteful, especially if you're doing it in a loop, or hidden in a function. Don't think about the case of a ten element list, think of a ten-billion element list. Personally, I don't think I've every used list.index, let alone needed rindex. But I think we underestimate the difficulty and cost of faking an rindex method from index for those who need it (if anyone does). > But with strings, you searching by > a subslice that can be greater than 1 in which case you can't use a similar > approach. Of course you can: you "just" need to reverse the substring as well. The conversions will be even more fiddly and error-prone: py> s = "abc spam def spam ghi" py> s.rindex('spam') == len(s) - s[::-1].index('spam'[::-1]) - len('spam') True but it can be done. -- Steven _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/