【问题标题】:Increment values in a python list by 6 until it reaches a condition [closed]将python列表中的值增加6,直到达到条件[关闭]
【发布时间】:2021-09-11 21:09:09
【问题描述】:

我正在努力解决这个看似简单的 python 问题。

我需要列表中的 90 个值增加 6(从 120)直到达到 240,一旦达到 240,它应该减少 6 回到 120。这个循环将继续直到达到 90 个值。

x = [30, 36, 42, 48, 54, 60]
e = [120]


for row in range(90):
    if e[row] >= 120 and e[row] != 240:
        e.append(e[row] + 6)
        print(e[row], "1")
    elif e[row] <= 240 and e[row] != 120:
        e.append(e[row] - 6)
        print(e[row])

到目前为止我的代码不能很好地工作。在达到 240 后,它会下降到 236。236 满足 &gt;= 120!= 240 条件,所以它只会回到 240。

任何指导将不胜感激!

【问题讨论】:

  • x 列表的用途是什么?你从不使用它。
  • 可能有更优雅的方式来做到这一点,但是:((list(range(120, 240, 6)) + list(range(240, 120, -6))) * 3)[:90]
  • @Barmar 哦,以后再说

标签: python loops increment


【解决方案1】:

只需将ranges 粘合在一起即可完成此操作的一种方法是:

>>> ((list(range(120, 240, 6)) + list(range(240, 120, -6))) * 3)[:90]
[120, 126, 132, 138, 144, 150, 156, 162, 168, 174, 180, 186, 192, 198, 204, 210, 216, 222, 228, 234, 240, 234, 228, 222, 216, 210, 204, 198, 192, 186, 180, 174, 168, 162, 156, 150, 144, 138, 132, 126, 120, 126, 132, 138, 144, 150, 156, 162, 168, 174, 180, 186, 192, 198, 204, 210, 216, 222, 228, 234, 240, 234, 228, 222, 216, 210, 204, 198, 192, 186, 180, 174, 168, 162, 156, 150, 144, 138, 132, 126, 120, 126, 132, 138, 144, 150, 156, 162, 168, 174]

要按照您尝试的方式在循环中构建它,我会将增量放在另一个变量中,并且仅在您碰到其中一个边缘时才翻转它,如下所示:

>>> e = [120]
>>> d = 6
>>> for _ in range(89):
...     n = e[-1] + d
...     if n >= 240 or n <= 120:
...         d *= -1
...     e.append(n)
...
>>> e
[120, 126, 132, 138, 144, 150, 156, 162, 168, 174, 180, 186, 192, 198, 204, 210, 216, 222, 228, 234, 240, 234, 228, 222, 216, 210, 204, 198, 192, 186, 180, 174, 168, 162, 156, 150, 144, 138, 132, 126, 120, 126, 132, 138, 144, 150, 156, 162, 168, 174, 180, 186, 192, 198, 204, 210, 216, 222, 228, 234, 240, 234, 228, 222, 216, 210, 204, 198, 192, 186, 180, 174, 168, 162, 156, 150, 144, 138, 132, 126, 120, 126, 132, 138, 144, 150, 156, 162, 168, 174]

【讨论】:

  • 像魅力一样工作,谢谢!另外,您在第一个解决方案中所做的 [:90] 事情叫什么,不知道这是可能的。
【解决方案2】:

我猜你想要这样的东西:

x = [30, 36, 42, 48, 54, 60]
e = [120]
dir = 1

for row in range(90):
    if dir == 1:
        if e[row] >= 240:
            dir = -1
    else:
        if e[row] <= 120:
            dir = 1

    e.append(e[row] + (dir * 6))
    print(e[row])
    print(f'  LENGTH: {len(e)}')


【讨论】:

    【解决方案3】:

    您可以使用变量来保存要添加的数量,并在6-6 之间切换。测试是正还是负,就知道要检查哪一端了。

    e = [120]
    increment = 6
    
    for _ in range(90):
        e.append(e[-1] + increment)
        if increment > 0 and e[-1] == 240:
            increment = -6
        elif increment < 0 and e[-1] == 120:
            increment = 6
    

    【讨论】:

    • 感谢您的回答,效果很好。我试图理解代码,但我对为什么 e 的索引为 -1 感到困惑
    • 负索引从末尾开始计数,所以e[-1] 是最后一个元素——刚刚添加的那个。
    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 2021-11-09
    • 2016-08-01
    • 1970-01-01
    • 2018-08-05
    • 2021-05-09
    相关资源
    最近更新 更多