反向索引保持有序值

时间:2016-11-18 15:09:40

标签: python list reverse

我试图写一个mod11(可能是偏离主题的)功能,我想出了这个:

display:inline-block

如果我稍微改变一下:

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()的情况吗?为什么索引被反转但值不是?

2 个答案:

答案 0 :(得分:0)

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将其反转,从而产生{{ 1}}。

    [(0, 'A'), (1, 'B'), ...]

因此,在第一种情况下,字符串反转两次,索引只反转一次,而在第二种情况下,字符串中的字母和索引都反转两次,从而产生原始顺序。

答案 1 :(得分:0)

不要认为这里的指数是特别的。 enumerate只是用元组(index,element)替换元素。执行此操作后,其他函数将在元组列表上运行,并且它们包含的内容无关紧要。换句话说,在第一种情况下使用[::-1]反转字母,在第二种情况下使用[::-1]反转元组(索引,字母)。