反向索引保持有序值
Reverse index keeping ordered values
我正在尝试编写一个 mod11(也许是题外话)函数,我想出了这个:
print [(i,v) for i,v in reversed(list(enumerate('ABCDEFG'[::-1])))]
>>[(6, 'A'), (5, 'B'), (4, 'C'), (3, 'D'), (2, 'E'), (1, 'F'), (0, 'G')]
如果我稍微改变一下:
print [(i,v) for i,v in reversed(list(enumerate('ABCDEFG'))[::-1])]
>>[(0, 'A'), (1, 'B'), (2, 'C'), (3, 'D'), (4, 'E'), (5, 'F'), (6, 'G')]
有人可以帮助我了解有关 reversed()
和 [::-1]
的情况吗?为什么索引被反转但值没有?
reversed
和 [::-1]
都将反转应用它们的列表(或字符串)。
第一种情况,你反转字符串,得到"GFE..."
,枚举反转后的字符串,得到[(0, 'G'), (1, 'F'), ...]
,然后再次反转枚举,得到[(6, 'A'), (5, 'B'), ...]
.
[(i,v) for i,v in reversed(list(enumerate('ABCDEFG'[::-1])))]
在第二种情况下,您枚举字符串,给出 [(0, 'A'), (1, 'B'), ...]
,然后用 [::-1]
反转该枚举并立即用 reverse
再次反转它,导致 [(0, 'A'), (1, 'B'), ...]
.
[(i,v) for i,v in reversed(list(enumerate('ABCDEFG'))[::-1])]
因此,在第一种情况下,字符串被颠倒了两次,索引只颠倒了一次,而在第二种情况下,字符串中的字母和索引都被颠倒了两次,从而得到了它们的原始顺序。
不要认为这里的索引有什么特别之处。 enumerate
只是用元组(索引,元素)替换元素。在你这样做之后,其他函数对元组列表进行操作,它们包含什么并不重要。换句话说,在第一种情况下 [::-1]
你反转字母,在第二种情况下 [::-1]
你反转元组 (index, letter).
我正在尝试编写一个 mod11(也许是题外话)函数,我想出了这个:
print [(i,v) for i,v in reversed(list(enumerate('ABCDEFG'[::-1])))]
>>[(6, 'A'), (5, 'B'), (4, 'C'), (3, 'D'), (2, 'E'), (1, 'F'), (0, 'G')]
如果我稍微改变一下:
print [(i,v) for i,v in reversed(list(enumerate('ABCDEFG'))[::-1])]
>>[(0, 'A'), (1, 'B'), (2, 'C'), (3, 'D'), (4, 'E'), (5, 'F'), (6, 'G')]
有人可以帮助我了解有关 reversed()
和 [::-1]
的情况吗?为什么索引被反转但值没有?
reversed
和 [::-1]
都将反转应用它们的列表(或字符串)。
第一种情况,你反转字符串,得到
"GFE..."
,枚举反转后的字符串,得到[(0, 'G'), (1, 'F'), ...]
,然后再次反转枚举,得到[(6, 'A'), (5, 'B'), ...]
.[(i,v) for i,v in reversed(list(enumerate('ABCDEFG'[::-1])))]
在第二种情况下,您枚举字符串,给出
[(0, 'A'), (1, 'B'), ...]
,然后用[::-1]
反转该枚举并立即用reverse
再次反转它,导致[(0, 'A'), (1, 'B'), ...]
.[(i,v) for i,v in reversed(list(enumerate('ABCDEFG'))[::-1])]
因此,在第一种情况下,字符串被颠倒了两次,索引只颠倒了一次,而在第二种情况下,字符串中的字母和索引都被颠倒了两次,从而得到了它们的原始顺序。
不要认为这里的索引有什么特别之处。 enumerate
只是用元组(索引,元素)替换元素。在你这样做之后,其他函数对元组列表进行操作,它们包含什么并不重要。换句话说,在第一种情况下 [::-1]
你反转字母,在第二种情况下 [::-1]
你反转元组 (index, letter).