如何从切片列表中获取原始索引?
当我有一个列表,比如说:
l = [1,2,3,4,5]
然后我执行:
l[1:] #Obtain
[2,3,4,5]
或者
l[:-1] # Obtain
[1, 2, 3, 4]
但是有没有办法在切割之前,获取原始列表中元素的索引,无论这个列表的长度是多少?
换句话说,当我得到一个子列表时,我想知道这些元素在原始列表中的索引位置。
3 个回答
1
你问的问题不是很清楚,不过如果你有一个序列(比如一串数字),想知道它在原始列表中的位置,并且可以假设这个序列是唯一的(也就是说没有重复),那么你可以用列表推导式来找到这个序列:
[(i, i+len(l)) for i in xrange(len(a)) if a[i:i+len(l)] == l]
2
你给出的每一种切片表示法都有一个更明确的写法:
l[1:] == l[1:len(l)]
l[:-1] == l[0:len(l)-1]
如果你想得到一系列的索引,可以把这些数字放进 range
里:
range(1, len(l))
range(0, len(l)-1)
3
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们刚开始学习编程的时候。比如,有人可能会在使用某个特定的功能时,发现它并没有按照预期工作。这时候,查看其他人的经验和解决方案就显得特别重要。
在这个平台上,很多人会分享他们遇到的问题和解决办法。通过阅读这些内容,我们可以学到很多实用的技巧和方法,帮助我们更好地理解编程的世界。
总之,遇到问题时,不要气馁,看看别人是怎么解决的,或许能给你带来灵感和帮助。
>>> def printy(v):
... for x, y in v:
... print('Original index:', x, ', original element:', y)
...
>>> # Original list
... a = [1, 2, 2, 4, 4, 4, 5, 0]
>>> with_original_indexes = tuple(zip(range(len(a)), a)) # or list()
>>> with_original_indexes = tuple(enumerate(a)) # Equivalent to the above
>>> printy(with_original_indexes)
Original index: 0 , original element: 1
Original index: 1 , original element: 2
Original index: 2 , original element: 2
Original index: 3 , original element: 4
Original index: 4 , original element: 4
Original index: 5 , original element: 4
Original index: 6 , original element: 5
Original index: 7 , original element: 0
>>> printy(with_original_indexes[1:5])
Original index: 1 , original element: 2
Original index: 2 , original element: 2
Original index: 3 , original element: 4
Original index: 4 , original element: 4
>>> printy(with_original_indexes[1:5][2:5])
Original index: 3 , original element: 4
Original index: 4 , original element: 4
>>>