【问题标题】:Negative numbers in range() function - how to print from positive to negative numbers?range() 函数中的负数 - 如何从正数打印到负数?
【发布时间】:2021-12-18 21:16:38
【问题描述】:

我正在尝试创建一个打印带有标记轴的板的函数。这是我打印 y 轴的代码。

y = [-1, 4]

y_axis = range(y[0], y[1]+1)

for i in y_axis: # rows 
    print(y_axis[i]) 

这是我得到的输出:

4
-1
0
1
2
3

为什么它不从 y[0] 开始并以整数递增直到 y[1]+1 ?我认为这是 range() 函数的输出。 对于我的项目,我需要这段代码来输出以下内容:

4
3
2
1
0
-1

我不明白如何获得我想要的结果,我已经尝试了好几个小时!非常感谢任何帮助,谢谢

编辑:棘手的部分是这应该能够以正确的顺序打印任何类型的范围:如果我使用负步骤,它可能无法对所有正值等正常工作 像这样的方法不起作用: -1 -> 4: 范围(y[0], y[1]+1) 4 -> -1: 范围(y[1], y[0]-1, -1)

我需要一个通用的解决方案。它可能与 enumerate() 函数有关吗?

【问题讨论】:

  • print(i) 而不是 print(y_axis[i])
  • 如果你想让range()产生一个降序序列,你必须传递一个可选的第三个参数(step)一个负值。
  • ^正确。您也使用范围的值作为范围的索引。
  • 另请注意,您需要 not_speshal 和 jasonharper 的 cmets 中的修复程序才能获得所需的输出 - 这不是非此即彼。
  • 为了清楚起见:得到-1 -> 4:range(y[0], y[1]+1),得到4 -> -1:range(y[1], y[0]-1, -1)

标签: python for-loop indexing range


【解决方案1】:

这就是您要查找的内容:

y = [-1, 4]

y_axis = range(y[1], y[0]-1, -1)

for i in y_axis:
    print(i)

你原来的代码有两个问题:

  1. 打印应该是元素,而不是索引列表。

  2. 您的范围应从 4(第一个元素)开始,到 -2(第二个元素)结束。为了确保你递减,使用函数范围的第三个参数:step。 step=-1 从第一个元素到最后一个元素递减。您可以通过以下方式测试项目范围输出的顺序:

    print([i for i in range(4, -2, -1)])

希望这有帮助!干杯! :)

【讨论】:

  • 但是如果范围是 y = [2, 5] 呢?那么它必须完全不同。我更多的是寻找一个通用的解决方案
  • 我的回答反映了您提出的问题 :) 要回答第二个问题,您可以使用条件轻松地将其拆分为两条路径。在这里:y = [bla, bla] if y[0]<y[1]: y_axis = range(y[0], y[1]) if y[0]>y[1]: y_axis = range(y[1], y[0]-1, -1) else: raise ValueError(f'The range for the y-axis is zero. Y-axis limits have to be different: {y}') for i in y_axis: print(i) 现在您已设置了通用解决方案。祝你好运!如果您发现我的回答有帮助,请不要犹豫,投票并批准为答案。将不胜感激:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 2022-04-25
  • 2017-02-11
  • 2018-08-07
相关资源
最近更新 更多