Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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 为什么';当我试图通过for循环修改数组时,它不会改变吗_Python_Arrays_For Loop - Fatal编程技术网

Python 为什么';当我试图通过for循环修改数组时,它不会改变吗

Python 为什么';当我试图通过for循环修改数组时,它不会改变吗,python,arrays,for-loop,Python,Arrays,For Loop,在使用JavaScript 3年后,我刚开始学习Python,我很难理解为什么下面的内容没有改变现有的数组 我基本上只想将每个数组修剪为前5个元素 data = [[1619740800000, '54474.27000000', '108499.98000000', '30000.00000000', '56989.21000000', '5.74916200', 1619827199999, '332834.07665858', 23971, '4.30590700', '251576.6

在使用JavaScript 3年后,我刚开始学习Python,我很难理解为什么下面的内容没有改变现有的数组

我基本上只想将每个数组修剪为前5个元素

data = [[1619740800000, '54474.27000000', '108499.98000000', '30000.00000000', '56989.21000000', 
'5.74916200', 1619827199999, '332834.07665858', 23971, '4.30590700', '251576.63190168', '0'], 
[1619827200000, '56989.21000000', 
'105053.04000000', '12000.00000000', '57794.45000000', '10.12076500', 1619913599999, 
'612746.95919066', 45086, '9.12267500', '557156.21495534', '0'], [1619913600000, '57797.36000000', 
'98900.00000000', '30000.00000000', '56539.47000000', '6.05304600', 1619999999999, '334919.15726802', 
 28754, '5.03377800', '284764.41259450', '0']]
我的for循环:

for x in data:
  x = x[:5]

# print(data) outputs the same as above
就这么做吧:

data = [[1619740800000, '54474.27000000', '108499.98000000', '30000.00000000', '56989.21000000', 
'5.74916200', 1619827199999, '332834.07665858', 23971, '4.30590700', '251576.63190168', '0'], 
[1619827200000, '56989.21000000', 
'105053.04000000', '12000.00000000', '57794.45000000', '10.12076500', 1619913599999, 
'612746.95919066', 45086, '9.12267500', '557156.21495534', '0'], [1619913600000, '57797.36000000', 
'98900.00000000', '30000.00000000', '56539.47000000', '6.05304600', 1619999999999, '334919.15726802', 
 28754, '5.03377800', '284764.41259450', '0']]

for i in range(len(data)):
    data[i] = data[i][:5]

“我很难理解为什么以下内容不改变现有阵列?”

我认为你真正的问题是为什么你尝试的东西不起作用,而不是具体如何做对,但我会解决这两个问题

据我所知,原因是,虽然
x
变量被分配,但在每次迭代中,分配了您要查找的结果(
x[:5]
),该结果不会存储在
数据
数组中。它只是在单个迭代期间存储在
x
变量中,它是数组中元素的副本,而不是对元素本身的引用。这和做什么不一样

for i in range(len(data)):
    data[i] = data[i][:5]  # explicitly sets the element
它显式地设置数组元素

作为确认,请参见以下内容:

data = [[1,2,3,4], [5,6,7,8]]
for x in data:
    x = x[:2]  # does indeed set x, but only x
    print(x)

[1,2]
[5,6]
>> print(data)    # but data array is unchanged
[[1,2,3,4], [5,6,7,8]
或者,请参见以下内容(列表):


data=[x[:5]表示数据中的x]
。问题是:您不能以这种方式指定列表中的元素。。。(
x
将只引用您的一些数据,但该
x
与您的列表不再有任何关系)。忘记添加:在这种情况下,您也可以使用a来修改嵌套列表:
x[:]=x[:5]
。谢谢,我知道了。我确实喜欢语法data=[x[:5]表示数据中的x],我已经使用了它,但我也明白了为什么第一个示例在默认情况下可以工作。Cheers x变量不是代码块的局部变量。@Niloct您是对的,我的错误,已编辑
data = [x[:5] for x in data]  
# this creates a new array, and stores it in data, but has the outcome you want