为什么我不能使用 map 编辑全局变量?

Why can't I edit a global variable using map?

提问人:noabh 提问时间:9/6/2022 更新时间:9/6/2022 访问量:175

问:

我目前正在处理从一个 到 几个 numpy 矩阵的数据。为此,我首先将矩阵创建为全局变量,然后遍历逐行和逐个观察填充矩阵观察值的列。pd.DataFrame

我正在使用一个我在 for 循环中定义自己的函数来实现这一点。map()

但是,矩阵总是结果为空(与初始化状态相同)。这不是因为局部与全局范围的问题,因为我正确地包含了关键字和关键字。globalnonlocal

我认为这与 有关,因为我的函数在 for 循环中工作正常。当我使用时,问题仍然存在。map()itertools.accumulate

我的问题是:为什么我不能使用 map 更改全局变量,以及我还能如何做到这一点,最好是使用 map 等其他函数。

下面的代码旨在代表我正在尝试做的事情。我之所以使用如此复杂的方法,是因为我的实际 DataFrame 具有非常复杂的结构。我在下面的代码中特意简化了数据帧。

d = {0: [0,0,0,0], 1: [1,2,3,4], 2: [2,4,6,8], 3:[3,6,9,12]}
myData = pd.DataFrame(data=d)

# global matrix
M = np.zeros((4,4),int)

def foo(r,c,value):
    global M
    M[r,c] = value

### DOESN'T work
for r, r_data in myData.iterrows():
    cols = r.index()
    map(lambda c, r=r, value=myData[r,c]: foo(r, c, value),cols) 

### WORKS
for r, r_data in myData.iterrows():
    cols = r.index()

    for c in colds:
        foo(r, c, myData[r,c]) 

这是我在 Stackoverflow 上的第一个问题;我希望我足够清楚!

Python pandas 循环数据 操作 python-itertools

评论

1赞 Samwise 9/6/2022
您实际上并不是在迭代对象。你也不需要声明 in,因为你不是在该函数中重新绑定,而是在改变它。mapglobal MfooM
1赞 AKX 9/6/2022
我认为你真的只是想要一个常规循环,而不是试图用 .formap
0赞 Samwise 9/6/2022
我同意@AKX,你可以通过在地图上强制迭代来做你想做的事,但它已经不必要地尴尬了,这只会让它变得更加尴尬。循环完全按照您的意愿进行操作,并且更干净。mapfor

答: 暂无答案