如何在 Python 中以相反的顺序获取字母范围?

How to get a letter range in reversed order in Python?

我知道这里已经解决了这个问题(例如,Is it possible to make a letter range in python?)。不过,我希望这个问题有所不同。

下面的代码给出了任意两个字母之间的范围

[chr(i) for i in range(ord('H'),ord('P'))]

输出

['H', 'I', 'J', 'K', 'L', 'M', 'N', 'O']

对于倒序的字母范围,使用reversed()returns空列表

[chr(i) for i in range(ord('P'),ord('H'))]

# or 

[chr(i) for i in reversed(range(ord('P'),ord('H')))]

输出

[]

预期输出

['O', 'N', 'M', 'L', 'K', 'J', 'I', 'H']

如何在 Python 中获取倒序的字母范围?

ord('P') 大于 ord('H'),因此 range(...) 为空范围。

要获得反向字母列表,请执行以下操作之一

  • 制作转发列表并申请reverse():

    reversed( range(ord('H'), ord('P')) )
    
  • 使用第3个参数来range():

    range(ord('P'), ord('H'), -1)
    
ord('P') -> 80
ord('H') -> 72

所以 [chr(i) for i in range(ord('P'),ord('H'))] 只是 [chr(i) for i in range(80,72)] 而在 range 中默认增量值为 1.

因为起始值 > 结束值且默认步长增量为 1,所以此迭代器 运行 导致一个空列表。

您需要将增量值从默认值更改为 -1

[chr(i) for i in range(ord('P')-1,ord('H')-1,-1)]

输出

['O', 'N', 'M', 'L', 'K', 'J', 'I', 'H']