Python 为什么';当我试图通过for循环修改数组时,它不会改变吗
在使用JavaScript 3年后,我刚开始学习Python,我很难理解为什么下面的内容没有改变现有的数组 我基本上只想将每个数组修剪为前5个元素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
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