【问题标题】:How to get a letter range in reversed order in Python?如何在Python中以相反的顺序获取字母范围?
【发布时间】:2021-04-26 09:14:35
【问题描述】:

我确实意识到这里已经解决了这个问题(例如,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()返回空列表

[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 中获取倒序的字母范围?

【问题讨论】:

  • 您的第二个示例 ([chr(i) for i in reversed(range(ord('P'),ord('H')))]) 将失败,原因与您的第一个示例相同 - 您仍在告诉它从 P 数到 H。我认为您打算从 H 数到 P然后反转它。
  • 我想从P数到H
  • 正确,你可以通过从 H 数到 P 然后反转它来做到这一点..

标签: python list range alphabetical


【解决方案1】:

ord('P') 大于ord('H'),所以range(...) 是一个空范围。

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

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

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

    range(ord('P'), ord('H'), -1)
    

【讨论】:

    【解决方案2】:
    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']
    
     
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-01
      • 2015-04-26
      • 2020-09-28
      • 2021-08-14
      • 2021-10-13
      • 2012-06-11
      • 2012-11-29
      • 2016-08-19
      相关资源
      最近更新 更多