首页 > 解决方案 > 无法将正确答案附加到python中的列表

问题描述

我试图在列表上执行以下操作 2 次:

-> for each index i: arr[i] = d - arr[i] where d is maximum element in list
-> append the resultant list to another list 

我的代码:

arr = [5, -1, 4, 2, 0]
n = len(arr)
res = []
for _ in range(2):
    d = max(arr)
    for i in range(n):
        arr[i] = d-arr[i]
    res.append(arr)
print(res)

输出:

[[6, 0, 5, 3, 1], [6, 0, 5, 3, 1]]

预期输出:

[[0, 6, 1, 3, 5], [6, 0, 5, 3, 1]]

请帮忙!

标签: python

解决方案


您放入arr列表res,但在第二个循环中不断修改其值。直接用值创建一个新的子列表,否则您的更改将反映在res所有相同指向的元素上arr

# Using your conventions. 
arr = [5, -1, 4, 2, 0]
res = []
for _ in range(2):
    d = max(arr)
    res.append([])
    for i in range(len(arr)):
        arr[i] = d-arr[i]
        res[-1].append(arr[i])
print(res)

# >>> [[0, 6, 1, 3, 5], [6, 0, 5, 3, 1]]

请注意,您的变量名称很难理解,因此这里有一个变体:

array = [5, -1, 4, 2, 0]
results = []
for _ in range(2):
    array_max = max(array)
    results.append([])
    for i in range(len(array)):
        array[i] = array_max - array[i]
        results[-1].append(array[i])
print(results)

推荐阅读