你要做的应该是列表和数组。
In [163]: a = [2323,34,12,-23,12,4,-33,-2,-1,11,-2]
...: b = [12,-23-1,-1,-3,-12]
...: c = np.array([23,45,3,13,-1992,5])
收集列表中的变量:
In [164]: alist = [a,b,c]
In [165]: alist
Out[165]:
[[2323, 34, 12, -23, 12, 4, -33, -2, -1, 11, -2],
[12, -24, -1, -3, -12],
array([ 23, 45, 3, 13, -1992, 5])]
如果我像你一样迭代,并给
item
,没有任何变化
alist
.
In [166]: for item in alist:
...: item = [1,2,3]
...:
In [167]: alist
Out[167]:
[[2323, 34, 12, -23, 12, 4, -33, -2, -1, 11, -2],
[12, -24, -1, -3, -12],
array([ 23, 45, 3, 13, -1992, 5])]
这是至关重要的;在遍历列表时,不能替换迭代变量;否则,您将失去与源的连接。
相反,我们修改了
项目
,将其更改到位。
In [168]: for item in alist:
...: for i,v in enumerate(item):
...: if v<0:
...: item[i] = 0
...:
...:
现在,更改出现在列表中:
In [169]: alist
Out[169]:
[[2323, 34, 12, 0, 12, 4, 0, 0, 0, 11, 0],
[12, 0, 0, 0, 0],
array([23, 45, 3, 13, 0, 5])]
验证这是否已更改原始列表/阵列:
In [170]: a
Out[170]: [2323, 34, 12, 0, 12, 4, 0, 0, 0, 11, 0]
让我们尝试一些更接近您的代码的东西:
In [171]: format_number = lambda n: n if n % 1 else int(n)
In [174]: formater = [2323,34,12,-23,12,4,-33,-2,-1,11,-2]
In [175]: new = list(map(lambda n: 0 if n < 0 else format_number(n), formater))
In [176]: new
Out[176]: [2323, 34, 12, 0, 12, 4, 0, 0, 0, 11, 0]
使用列表(map())我创建了一个新列表。如果你想在循环中使用这个,就像我在
项目
,我必须修改原文。
In [177]: formater[:] = new
In [178]: formater
Out[178]: [2323, 34, 12, 0, 12, 4, 0, 0, 0, 11, 0]
将其应用于原始变量:
In [179]: a = [2323,34,12,-23,12,4,-33,-2,-1,11,-2]
...: b = [12,-23-1,-1,-3,-12]
...: c = np.array([23,45,3,13,-1992,5])
In [180]: alist = [a,b,c]
In [181]: for item in alist:
...: item[:]=list(map(lambda n: 0 if n < 0 else format_number(n), item))
...:
In [182]: alist
Out[182]:
[[2323, 34, 12, 0, 12, 4, 0, 0, 0, 11, 0],
[12, 0, 0, 0, 0],
array([23, 45, 3, 13, 0, 5])]