如何将列表(元组内)中的元组转换为列表?

问题描述 投票:0回答:1

我环顾四周,找不到任何我认为有用的东西。

我使用的代码如下:

xy = (event.xdata, event.ydata)
a = self.charges.get_charges()
a[self.closest_k][1] = xy

我正在搞乱GUI,我的问题是我需要用光标的位置“移动”GUI上对象的位置。 xy返回我需要作为数组的坐标对,self.closest_k返回一个数字(有很多对象,self.closest_k返回我想要移动的对象的索引)。

a = [(1.0, array([ 1.,  0.])), (1.0, array([-1.,  0.])), (-1.0, array([ 0., -1.])), (-1.0, array([ 0., -1.]))]

问题是元组是不可变的,因为这是一个赋值,所以我不允许更改函数get_charges()。事先我换了:

a = self.charges.get_charges()
a[self.closest_k][1] = xy

有:

self.charges._pos[self.closest_k, :] = xy

但在进行静态代码分析时,我获得了警告消息MyMplWidget.on_mouse_move: Access to a protected member _pos of a client class。所以我想问一个解决这个问题的方法,我考虑将元组转换为列表,但是不会将元组中的元组转换为列表。

编辑1:

好的,这是我以前的改进。每当我尝试拖动对象时,运行代码都不会返回错误。这是发生的事情:

[(1.0, array([ 1.,  0.])), (1.0, array([-1.,  0.])), (-1.0, array([ 0., 1.])), (-1.0, array([ 0., -1.]))]
(-1.0, (-0.00071672257102850523, -1.5525644333591355))

所以,我试图拖动具有原始位置[0,-1]的对象,并且这样做几乎就像创建了列表的新元素一样,它在我拖动时覆盖了原始位置,但是一旦我停止拖动对象恢复其原始位置。

(-1.0, (-0.00071672257102850523, -1.609902239041312))
(-1.0, array([ 0., -1.]))

在那个例子中,我用原始位置[0,-1]拖动对象。一旦我释放了它,它就恢复了原来的位置。 (这实际上并没有在GUI上显示,对象根本不会移动,但这是我可以处理的不同功能的问题)。我认为,关于绘制GUI,我的编码目前的工作方式是处理绘制对象位置的函数,期望其原始位置发生变化。但原始位置有点“锁定”在一个元组内(对于坏的术语而言)。我想我真的不知道该怎么做。

python list tuples
1个回答
0
投票

如果我正确理解了这个问题,我认为你应该只是替换整个元素,而不是试图修改内部元组中的一个条目。所以

a[self.closest_k] = (a[self.closest_k][0], xy)
© www.soinside.com 2019 - 2024. All rights reserved.