当我有一个清单时,让我们说:
l = [1,2,3,4,5]
我做了:
l[1:] #Obtain
[2,3,4,5]
或
l[:-1] # Obtain
[1, 2, 3, 4]
但是有没有办法在切片之前从原始列表中获取原始索引,无论操作列表的长度如何?
换句话说,当我得到一个子列表时,我想得到它们的元素与原始列表相比所属的索引。
答案 0 :(得分:2)
对于您给出的每个切片符号,都有一个更明确的等价物:
l[1:] == l[1:len(l)]
l[:-1] == l[0:len(l)-1]
要获取索引列表,您可以将这些数字提供给range
:
range(1, len(l))
range(0, len(l)-1)
答案 1 :(得分:1)
你要问的是什么并不完全清楚,但是如果你有序列并想知道它的原始索引,并且你可以假设序列是唯一的,你可以use a list comprehension to find the sequence:
[(i, i+len(l)) for i in xrange(len(a)) if a[i:i+len(l)] == l]
答案 2 :(得分:1)
>>> 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
>>>