Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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_Numpy - Fatal编程技术网

Python 了解使用列表编辑列表的行为

Python 了解使用列表编辑列表的行为,python,numpy,Python,Numpy,我有一个包含信息和7个数据集的列表,我将独立处理 此列表包含以下内容 print header [['Specimen_RawData_1.csv' '' '' '' ''] ['Time' 'Extension' 'Load' 'Strain' 'True Strain'] ['(s)' '(mm)' '(N)' '(%)' '(%)']] 现在我想创建一个包含7个条目的列表,并用它编辑一些值。特别地,将空字符串替换为“Cycle:”+与数据集对应的数字 以下是我如何努力做到这一点 我有我正

我有一个包含信息和7个数据集的列表,我将独立处理

此列表包含以下内容

print header
[['Specimen_RawData_1.csv' '' '' '' '']
['Time' 'Extension' 'Load' 'Strain' 'True Strain']
['(s)' '(mm)' '(N)' '(%)' '(%)']]
现在我想创建一个包含7个条目的列表,并用它编辑一些值。特别地,将空字符串替换为“Cycle:”+与数据集对应的数字

以下是我如何努力做到这一点

我有我正试图复制和编辑的列表

header
我将它复制到一个临时变量

tempHeader
然后我对列表标题的内容进行一些更改

然后我将临时变量附加到

newHeader


newHeader = []
for i in range(len(dirChange_index)/2):
    tempHeader =[]
    tempHeader = header
    # Want to replace a locaton in the list with the value Cycle i
    tempHeader[0][1] = 'Cycle: ' + str(i+1)
    print tempHeader
print '--'
    newHeader.append([tempHeader])    
print newHeader
这表明我正在成功更改临时列表中的值

[['Specimen_RawData_1.csv' 'Cycle: 1' '' '' '']
['Time' 'Extension' 'Load' 'Strain' 'True Strain']
['(s)' '(mm)' '(N)' '(%)' '(%)']]

[['Specimen_RawData_1.csv' 'Cycle: 2' '' '' '']
['Time' 'Extension' 'Load' 'Strain' 'True Strain']
['(s)' '(mm)' '(N)' '(%)' '(%)']]
。 .

我不理解的行为是,当我将临时变量附加到不断增长的列表中时,它也会替换以前的所有值

print newHeader
[[array([['Specimen_RawData_1.csv', 'Cycle: 7', '', '', ''],
   ['Time', 'Extension', 'Load', 'Strain', 'True Strain'],
   ['(s)', '(mm)', '(N)', '(%)', '(%)']], 
  dtype='|S26')], [array([['Specimen_RawData_1.csv', 'Cycle: 7', '', '', ''],
   ['Time', 'Extension', 'Load', 'Strain', 'True Strain'],
   ['(s)', '(mm)', '(N)', '(%)', '(%)']], 
  dtype='|S26')], [array([['Specimen_RawData_1.csv', 'Cycle: 7', '', '', ''],
   ['Time', 'Extension', 'Load', 'Strain', 'True Strain'],
   ['(s)', '(mm)', '(N)', '(%)', '(%)']], 
  dtype='|S26')], [array([['Specimen_RawData_1.csv', 'Cycle: 7', '', '', ''],
   ['Time', 'Extension', 'Load', 'Strain', 'True Strain'],
   ['(s)', '(mm)', '(N)', '(%)', '(%)']], 
  dtype='|S26')], [array([['Specimen_RawData_1.csv', 'Cycle: 7', '', '', ''],
   ['Time', 'Extension', 'Load', 'Strain', 'True Strain'],
   ['(s)', '(mm)', '(N)', '(%)', '(%)']], 
  dtype='|S26')], [array([['Specimen_RawData_1.csv', 'Cycle: 7', '', '', ''],
   ['Time', 'Extension', 'Load', 'Strain', 'True Strain'],
   ['(s)', '(mm)', '(N)', '(%)', '(%)']], 
  dtype='|S26')], [array([['Specimen_RawData_1.csv', 'Cycle: 7', '', '', ''],
   ['Time', 'Extension', 'Load', 'Strain', 'True Strain'],
   ['(s)', '(mm)', '(N)', '(%)', '(%)']], 
  dtype='|S26')]]

我错过了什么。似乎我误解了列表和数组中的一些基本内容。我想我可以很容易地用numpy实现这一点,但我想了解这里发生了什么。

您正在创建一个引用而不是副本,因此您正在更改相同的对象:

tempHeader = header # <- reference to object
检查对象标识时,可以看到它们都指向内存中的同一位置:

In [17]: l = [[1,2,3],[4,5,6]]

In [18]: id(l)
Out[18]: 140365355535048

In [19]: id(l[0])
Out[19]: 140365355537608

In [20]: l1 = l

In [21]: id(l1)
Out[21]: 140365355535048

In [22]: id(l1[0])
Out[22]: 140365355537608
In [23]: l is l1
Out[23]: True
现在实际制作一个副本:

In [24]: from copy import  deepcopy

In [25]: l = [[1,2,3],[4,5,6]]

In [26]: id(l)
Out[26]: 140365355535688

In [27]: id(l[0])
Out[27]: 140365355559112

In [28]: l1 = deepcopy(l)

In [29]: id(l1)
Out[29]: 140365355561928

In [30]: id(l1[0])
Out[30]: 140365355562824

In [31]: l is l1
Out[31]: False

你指的是哪个临时工?请提供导致问题的代码。因此,当我将tempHeader放入列表(newHeader)时,我实际上只是放置tempHeader的引用副本,因此它一直在变化?@user2236547,您基本上是在创建指向同一对象的指针,当它改变时,所有的引用都会改变,因为它们都是相同的对象。谢谢你的详细解释。我很惊讶我以前没有遇到过这些问题,因为我做了很多嵌套列表和np数组。不用担心,当涉及到列表时,您总是使用foo=bar创建一个引用,并且因为它们是可变的,所以所有更改都会反映出来,因为操纵不会创建新对象,而只是更改原始对象
In [17]: l = [[1,2,3],[4,5,6]]

In [18]: id(l)
Out[18]: 140365355535048

In [19]: id(l[0])
Out[19]: 140365355537608

In [20]: l1 = l

In [21]: id(l1)
Out[21]: 140365355535048

In [22]: id(l1[0])
Out[22]: 140365355537608
In [23]: l is l1
Out[23]: True
In [24]: from copy import  deepcopy

In [25]: l = [[1,2,3],[4,5,6]]

In [26]: id(l)
Out[26]: 140365355535688

In [27]: id(l[0])
Out[27]: 140365355559112

In [28]: l1 = deepcopy(l)

In [29]: id(l1)
Out[29]: 140365355561928

In [30]: id(l1[0])
Out[30]: 140365355562824

In [31]: l is l1
Out[31]: False