我有一個清單my_list = [6, 9, 10, 0, 5]如何編寫代碼以獲取一個數字與其早期數字的所有差異的列表,前提是它大于早期數字my_list[0]沒有更早的號碼my_list[1] = 9這比my_list[0]我們能找到的差別更大9-6 = 3?,F在answer_list=[3]。my_list[2] = 10大于my_list[0],my_list[1] answer_list = [3, 1, 4]my_list[3] = 0沒有前一個數字小于2。沒做什么my_list[4] = 5. my_list[3]小于my_list[4]。answer_list = [3, 1, 4, 5]應該return [3, 1, 4, 5]我的解決方案是def ans(my_list): new_list = [] for x in my_list: for i in range(my_list.index(x)): if x >= my_list[i]: diff = x - my_list[i] new_list.append(diff) return new_list有沒有更好的方法呢,嵌套循環有點過度殺戮和耗時
1 回答

慕森王
TA貢獻1777條經驗 獲得超3個贊
您需要兩個循環,但index如果您使用enumerate.
my_list = [6, 9, 10, 0, 5]
result = []
for index, value in enumerate(my_list[1:], start=1):
for previous_value in my_list[:index]:
difference = value - previous_value
if difference > 0:
result.append(difference)
print(result)
獎勵:如果您在原始列表中有重復的數字,您的算法就會出現問題,例如[6, 9, 10, 9, 10, 0, 5]. 這種方法可以解決它。你的結果:[3, 4, 1, 3, 4, 1, 5],正確的結果:[3, 4, 1, 3, 4, 1, 1, 5]
嵌套較少,但可讀性較差:
result = []
for index, value in enumerate(my_list[1:], start=1):
result.extend(filter(lambda x: x > 0, (value - previous_value for previous_value in my_list[:index])))
print(result)
添加回答
舉報
0/150
提交
取消