【问题标题】:I need to create a list of numbers where each number relies on the previous number我需要创建一个数字列表,其中每个数字都依赖于前一个数字
【发布时间】:2015-10-31 21:03:04
【问题描述】:

我需要一个从 1 开始的列表,之后的每个数字都是前一个数字的 90%。例如)1,.9,.81,.729 等用于(输入)迭代。需要它长时间(输入)迭代让我相信我需要使用 for 循环,所以我可以说

for i in range (1, N_steps): [我后来有 N_steps = input("say n step")]

我该怎么做?

到目前为止我所拥有的:

sl = []
for i in range (1, iti):
    sl = [1]
    sl[i+1] = sl[i] * .9

但我不断收到“列表索引超出范围”错误。

【问题讨论】:

  • 您是否尝试过思考问题、开发算法、测试算法、改进算法并重复前两个步骤直到找到解决方案?
  • 您是在问我是否尝试过自己解决问题?谢谢你的帮助
  • 先在纸上写出来:把它分解成计算机可以做的小而简单的步骤,然后一个一个地完成。将这些结合在一起后,将您的伪代码算法转换为 Python 代码结构。
  • 我已经尝试过解决,但这就是我在这里的原因。 sl = [] for i in range (1, iti): sl = [1] sl[i+1] = sl[i] * .9 是目前的样子,但我不断收到“列表索引已出范围”错误。它也是一个输入
  • @TylerDavis 你不应该通过 comment 添加其他信息;因为它属于 question 它应该进入 question

标签: python for-loop


【解决方案1】:

你所拥有的东西会让你出界异常,因为你在没有元素的列表中向前看。

您应该做的是在循环之前创建列表,然后向后看并添加新元素。

sl = [1]
for i in range (1, iti):
    sl.append(sl[i-1] * .9)

【讨论】:

  • 哦,因为没有 i+1 可以查看?
  • 因为那个元素还没有被填充?
  • @TylerDavis i 在第一次迭代中有什么价值? sl[i] 应该是什么? python 索引是从零开始还是从一开始?
  • @TylerDavis 我相信我首先回答正确,但无论如何
【解决方案2】:

您的代码的问题在于,在循环的每次迭代中,您将 sl 设置为带有单个元素 1list,然后立即尝试访问其他索引,但失败了,因为唯一的有效索引为0(或-1)。相反,使用append() 根据索引为-1 的最后一个元素向list 添加新元素:

sl = [1]
for i in range (1, iti):
    sl.append(sl[-1] * 0.9)

【讨论】:

    【解决方案3】:
    reduce(lambda a, b: b * 0.9, [your_input_list], 1)
    

    【讨论】:

      猜你喜欢
      • 2022-10-02
      • 2018-12-12
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 2023-03-16
      • 2020-07-28
      相关资源
      最近更新 更多