【问题标题】:Python: Nested For Loops To Find Difference In Elements In List --> One Loop Test & Appending to Output ListPython:嵌套 For 循环以查找列表中元素的差异 --> 一个循环测试并附加到输出列表
【发布时间】:2021-05-29 09:26:17
【问题描述】:

我完全糊涂了!

我在下面有一个列表:

prices = [13, 11, 10, 8, 5]

我想编写代码来反转列表以创建 [5, 8, 10, 11, 13] 并从 5 中减去每个术语并将其附加到新列表中。

所以我想要的输出是:[-3, -5, -6, -8]

我使用 break 编写了下面的代码来测试一个循环:

def max_profit(prices):
    ###
    ### YOUR CODE HERE
    prices_reversed = list(reversed(prices))
    print (f'prices_reversed is: {prices_reversed}')
    
    profit_amt_list = []

    for i in range(len(prices_reversed)):
        print (f'i is: {i}')
        current_value = prices_reversed[i]
        
        for j in range(i,len(prices_reversed)):
            print (j)
            
            if j+1 < len(prices_reversed):
                print ('true')
                next_value = prices_reversed[j+1]
        
            # print (current_value, next_value)
            profit_amt_list.append(current_value - next_value)
            
        break
        
    print (profit_amt_list)

    ###

max_profit(prices)

我的代码打印:

prices_reversed is: [5, 8, 10, 11, 13]
i is: 0
0
true
1
true
2
true
3
true
4
**[-3, -5, -6, -8, -8]**

对于我的一生,我不明白为什么我有两个 -8 值,而列表应该只包含一个。请帮我理解!

【问题讨论】:

  • 你为什么不期望输出是 [0, -3, -5, -6, -8] ?为什么应该跳过反向列表的第一项?其他明智的[x-5 for x in reversed(prices)] 就足够了

标签: python for-loop append


【解决方案1】:

你混淆了你的循环。

首先,你的外循环是绝对没用的。您从不使用 i 的值,并且您总是在第一次迭代后中断。摆脱那个循环。

您的j 循环的问题在于,尽管您试图找到一个简单的区别,但您将问题复杂化太多而无法看到问题。在最后一次迭代中,不是停止(你有 5 个数字,所以只有 4 个差异),你根本不用费心更新next_value,然后你再循环一次。由于没有任何关键值发生变化,因此您第二次执行 5-13 并将其添加到 profit_amt_list。

由于current_value总是5,列表的第一个元素,直接计算即可:

profit_amt_list = []
price = prices_reversed[0]
for value in prices_reversed[1:]:
    profit_amt_list.append(price - value)

    print (profit_amt_list)

最终输出:

[-3, -5, -6, -8]

【讨论】:

  • 谢谢!中断只是出于调试目的而暂时...需要将其删除,以便一旦解决了调试问题,我就可以循环
【解决方案2】:
import numpy as np

arr = np.array([13, 11, 10, 8, 5])
arr = np.flip(arr)
arr = 5 - arr

print(arr[arr != 0])

输出

[-3, -5, -6, -8]

如果你想让它从上到下打印,或者像这样。

for x in arr[arr != 0]:
    print(x)

输出

-3
-5
-6
-8

【讨论】:

  • @PineNuts0 如果您要处理大量价格,这是理想的选择。
猜你喜欢
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 2022-12-15
  • 2022-07-14
  • 2016-06-01
  • 2015-02-14
  • 1970-01-01
相关资源
最近更新 更多