在列表中追加列表有一些问题

2024-09-30 05:26:07 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我已经在lista_input中添加了一些内容,那么每当在generabinario()方法中修改参数arr时(例如:arr[I]=0/1),lista_input中的所有值都会以完全相同的方式修改

发生了什么事

这是我对给定程序的输出:

[[1, 1], [1, 1], [1, 1], [1, 1]]

当然,输出是[1,1]的序列,因为这是该方法对arr参数所做的最后一次修改

这就是代码:

lista_input = []

def generabinario(n, arr, i):
    if i == n:
        lista_input.append(arr)
        return
    arr[i] = 0
    generabinario(n, arr, i + 1)
    arr[i] = 1
    generabinario(n, arr, i + 1)


if __name__ == "__main__":
    weights = []
    results = []
    print("Inserisci il numero di pesi da inserire")
    num = int(input())
    print("Inserisci i pesi")
    for i in range(0, num):
        weights.append(int(input()))
    inputs = [None] * num
    generabinario(2, inputs, 0)
    print(lista_input)

Tags: 方法input参数ifnumintinputsprint
1条回答
网友
1楼 · 发布于 2024-09-30 05:26:07

尝试:

lista_input = []

def generabinario(n, arr, i):
    if i == n:
        lista_input.append(arr[:])  # notice the arr[:]
        return
    arr[i] = 0
    generabinario(n, arr, i + 1)
    arr[i] = 1
    generabinario(n, arr, i + 1)


if __name__ == "__main__":
    weights = []
    results = []
    print("Inserisci il numero di pesi da inserire")
    num = int(input())
    print("Inserisci i pesi")
    for i in range(0, num):
        weights.append(int(input()))
    inputs = [None] * num
    generabinario(2, inputs, 0)
    print(lista_input)

arr[:]创建一个全新的数组,而不是具有相同引用的“不同”数组。仅使用arr,在每次调用中使用相同的数组,因为它们都具有相同的引用(即内存中的相同位置)。通过修改一个阵列,即修改此阵地,从而修改指向此阵地的所有阵列

请参阅另一个问题的答案,了解什么是值和引用以及与之相关的行为:https://stackoverflow.com/a/986145/5446749

相关问题 更多 >

    热门问题