Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python列表变量-它是使用内存位置还是什么?_Python - Fatal编程技术网

Python列表变量-它是使用内存位置还是什么?

Python列表变量-它是使用内存位置还是什么?,python,Python,每次我计算它们与预期值之间的差异时,我都会尝试弹出附加到列表m中的值。我在使用m.pop()前后打印列表的结果。是不是在使用内存中的某个位置并在deltaL中弄乱了我的列表 M=[] delta = 3 while abs(delta) > 0.3: for num1 in range(450,800,20): best_config_per_numL = [] delta_mL = [] for config in ['FFF','

每次我计算它们与预期值之间的差异时,我都会尝试弹出附加到列表m中的值。我在使用
m.pop()
前后打印列表的结果。是不是在使用内存中的某个位置并在deltaL中弄乱了我的列表

M=[]
delta = 3
while abs(delta) > 0.3:
    for num1 in range(450,800,20):
        best_config_per_numL = []
        delta_mL = []
        for config in ['FFF','FFS','FSF','FSS','SFF','SFS','SSF','SSS']:
            M.append(gen(num1,config[0]))
            M.append(gen(num1,config[1]))
            M.append(gen(num1,config[2]))

            xyL = []
            xL = range(400,801,1)
            for i in xL:
                xyL.append([geny(M,i),i])

            deltaL = []
            yL = range(400,801,1)
            for i in range(len(yL)):
                expected = yL[i]
                actual = xyL[i][0].real
                deltaL.append(abs(expected - actual))

            delta_mL.append([max(deltaL),M]) 
            print '\n'+str(delta_mL)+'\n' #<-------------------------- LINE 1
            M.pop()
            M.pop()
            M.pop()
        print '\n'+str(delta_mL)+'\n' #<-------------------------- LINE 2
        best_config_per_numL.append(delta_mL[0].sort()[0]) #best config for all lambda

    M.append(best_config_per_numL.sort()[0][1])
    delta = best_config_per_numL.sort()[0][0]
M=[]
δ=3
当abs(增量)>0.3时:
对于范围(450800,20)内的num1:
最佳配置每numL=[]
delta_mL=[]
对于[‘FFF’、‘FFS’、‘FSF’、‘FSS’、‘SFF’、‘SFS’、‘SSF’、‘SSS’]中的配置:
M.append(gen(num1,配置[0]))
M.append(gen(num1,配置[1]))
M.append(gen(num1,配置[2]))
xyL=[]
xL=范围(400801,1)
对于xL中的i:
xyL.append([geny(M,i),i])
deltaL=[]
yL=范围(400801,1)
对于范围内的i(len(yL)):
预期=yL[i]
实际值=xyL[i][0]。实际值
追加增量(abs(预期-实际))
delta_mL.append([max(deltaL),M])
打印'\n'+str(delta_mL)+'\n'#
是不是在使用内存中的某个位置并在deltaL中弄乱了我的列表

M=[]
delta = 3
while abs(delta) > 0.3:
    for num1 in range(450,800,20):
        best_config_per_numL = []
        delta_mL = []
        for config in ['FFF','FFS','FSF','FSS','SFF','SFS','SSF','SSS']:
            M.append(gen(num1,config[0]))
            M.append(gen(num1,config[1]))
            M.append(gen(num1,config[2]))

            xyL = []
            xL = range(400,801,1)
            for i in xL:
                xyL.append([geny(M,i),i])

            deltaL = []
            yL = range(400,801,1)
            for i in range(len(yL)):
                expected = yL[i]
                actual = xyL[i][0].real
                deltaL.append(abs(expected - actual))

            delta_mL.append([max(deltaL),M]) 
            print '\n'+str(delta_mL)+'\n' #<-------------------------- LINE 1
            M.pop()
            M.pop()
            M.pop()
        print '\n'+str(delta_mL)+'\n' #<-------------------------- LINE 2
        best_config_per_numL.append(delta_mL[0].sort()[0]) #best config for all lambda

    M.append(best_config_per_numL.sort()[0][1])
    delta = best_config_per_numL.sort()[0][0]
在某种程度上

delta_mL.append([max(deltaL),M])
delta_mL
M
有一个引用。不是
M
的副本。如果
M
发生变化,则
delta\u mL
也会发生变化

您可能不想简单地附加
M
。您可能希望使用
M[:]
制作
M
的副本

是不是在使用内存中的某个位置并在deltaL中弄乱了我的列表

M=[]
delta = 3
while abs(delta) > 0.3:
    for num1 in range(450,800,20):
        best_config_per_numL = []
        delta_mL = []
        for config in ['FFF','FFS','FSF','FSS','SFF','SFS','SSF','SSS']:
            M.append(gen(num1,config[0]))
            M.append(gen(num1,config[1]))
            M.append(gen(num1,config[2]))

            xyL = []
            xL = range(400,801,1)
            for i in xL:
                xyL.append([geny(M,i),i])

            deltaL = []
            yL = range(400,801,1)
            for i in range(len(yL)):
                expected = yL[i]
                actual = xyL[i][0].real
                deltaL.append(abs(expected - actual))

            delta_mL.append([max(deltaL),M]) 
            print '\n'+str(delta_mL)+'\n' #<-------------------------- LINE 1
            M.pop()
            M.pop()
            M.pop()
        print '\n'+str(delta_mL)+'\n' #<-------------------------- LINE 2
        best_config_per_numL.append(delta_mL[0].sort()[0]) #best config for all lambda

    M.append(best_config_per_numL.sort()[0][1])
    delta = best_config_per_numL.sort()[0][0]
在某种程度上

delta_mL.append([max(deltaL),M])
delta_mL
M
有一个引用。不是
M
的副本。如果
M
发生变化,则
delta\u mL
也会发生变化

您可能不想简单地附加
M
。您可能需要使用
M[:]
复制
M

此行:

delta_mL.append([max(deltaL),M])
…创建一个包含两个项目的列表,其中第二个项目是对列表M的引用。稍后更改M时,您可以在delta_mL中看到更改,因为它引用了相同的列表。如果要制作M的副本,请尝试:

delta_mL.append([max(deltaL),list(M)])
这将创建一个新列表,其中包含与M相同的项,但该列表是一个单独的副本,因此在添加或删除M中的项时,该列表不会更改

请记住,在Python中,变量存储对对象的引用。如果要创建对象的副本,则需要显式执行此操作。当然,只有当所讨论的对象是可变的(如列表)时,这才是重要的。不可变对象(如数字、元组和字符串)不是问题,因为即使许多变量存储对同一不可变对象的引用,它们都不能修改它,因此共享不是问题。

这一行:

delta_mL.append([max(deltaL),M])
…创建一个包含两个项目的列表,其中第二个项目是对列表M的引用。稍后更改M时,您可以在delta_mL中看到更改,因为它引用了相同的列表。如果要制作M的副本,请尝试:

delta_mL.append([max(deltaL),list(M)])
这将创建一个新列表,其中包含与M相同的项,但该列表是一个单独的副本,因此在添加或删除M中的项时,该列表不会更改


请记住,在Python中,变量存储对对象的引用。如果要创建对象的副本,则需要显式执行此操作。当然,只有当所讨论的对象是可变的(如列表)时,这才是重要的。不可变对象(如数字、元组和字符串)不是问题,因为即使许多变量存储对同一个不可变对象的引用,也没有一个变量可以修改它,所以共享不是问题。

你到底在问什么?我认为根本原因是对Python变量的另一种误解。但我不知道你到底遇到了什么问题。请不要打印“str(something)”。它看起来很混乱,什么也不做。。请将所有的
print…str(…)…
替换为更简单的
print“\n”,max(deltaL),M,“\n”
此外,代码缩进不正确,“第2行”有7个前导空格。在我的回答中,我假设它们是8。正如我告诉你的,你不能得到与第1行相同的值,因为第2行位于程序的另一部分,其中M列表为空。我已经更新了问题。我之前展示的打印行是一个明显的答案。新的打印行错误更加困难。你到底在问什么?我认为根本原因是对Python变量的另一种误解。但我不知道你到底遇到了什么问题。请不要打印“str(something)”。它看起来很混乱,什么也不做。。请将所有的
print…str(…)…
替换为更简单的
print“\n”,max(deltaL),M,“\n”
此外,代码缩进不正确,“第2行”有7个前导空格。在我的回答中,我假设它们是8。正如我告诉你的,你不能得到与第1行相同的值,因为第2行位于程序的另一部分,其中M列表为空。我已经更新了问题。我之前展示的打印行是一个明显的答案。新的打印行错误更加困难。更新帖子以更准确地反映我的问题。更新帖子以更准确地反映我的问题。