交换对象 - 蟒
我有形式的元组:交换对象 - 蟒
a[i][j][k]
ķ∈[0,1] 一个由对象T,被包括在列表中的球队。
我想要的是交换所有对a [i] [j] [0]和a [i] [j] [1]的位置。所以:
a[i][j][0], a[i][j][1] = a[i][j][1], a[i][j][0]
作为是一个元组,我的理解是不可改变的,这是什么原因,这不起作用:
for i in range(0, len(teams)-1):
for j in range(0, len(teams)/2):
a[i][j][0],a[i][j][1] = a[i][j][1],a[i][j][0]
我试图转换到一个列表(L =名单(a)),但没有成功。
有人可以帮我建议吗?对不起万一我nomenclatur还不完善,这是我的第一个问题,关于SO :)
感谢
假设a
是tuple
的tuple
S的tuple
秒。
我会
- 将其转换成列表的列表
- 做我想做的事情
- 将其转换回原来的格式,如果需要的列表
例如:
a = (((1,2),(3,4)),((10,20),(30,40)))
a_as_list = [[list(x) for x in b] for b in a]
print(a_as_list)
# now manipulate elements:
a_as_list[0][0] = [a_as_list[0][0][1],a_as_list[0][0][0]]
a_as_tuple = tuple(tuple(tuple(x) for x in b) for b in a_as_list)
print(a_as_tuple)
结果:
[[[1, 2], [3, 4]], [[10, 20], [30, 40]]]
(((2, 1), (3, 4)), ((10, 20), (30, 40)))
如你所见,元组转换为列表,制作,再转换回元组
编辑:如果a
是元组的列表的列表,你可以这样做:
a[i][j][0], a[i][j][1] = a[i][j][1], a[i][j][0]
但你可以重新创建内部的元组:
a[i][j] = a[i][j][1],a[i][j][0]
谢谢。这是我现有报价的快速解决方案。 –
@ MaximilianA.Graves看我的编辑,应该够了 –
完美。我想我必须阅读和学习更多有关列表和元组之间的区别。但这已经非常有帮助! –
问题
元组是immutables确实如此。 a
可能是一个列表,甚至是一个列表的列表。所以这个代码:
L = list(a)
不会改变任何东西。问题似乎是a
是元组列表的列表。a[i][j]
是一个元组,这是不可能的新值分配给它:
>>> t = ('a', 'b')
>>> t[0] = 'b'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
可能的解决方法
如果你有3 d矩阵工作,numpy
或许可以帮助你。它支持advanced indexing and slicing:
>>> import numpy as np
>>> table = np.arange(18).reshape(3,3,2)
>>> table
array([[[ 0, 1],
[ 2, 3],
[ 4, 5]],
[[ 6, 7],
[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15],
[16, 17]]])
>>> table[:, :, [0, 1]] = table[:, :, [1, 0]]
>>> table
array([[[ 1, 0],
[ 3, 2],
[ 5, 4]],
[[ 7, 6],
[ 9, 8],
[11, 10]],
[[13, 12],
[15, 14],
[17, 16]]])
矩阵内的元素不必是数字,它们可以是任何对象:
>>> class T(str):
... pass
...
>>> T('test')
'test'
>>> m = np.array([[(T(1), T(2))],[(T(3), T(4))]])
>>> m[:, :, [0, 1]] = m[:, :, [1, 0]]
>>> m
array([[['2', '1']],
[['4', '3']]],
dtype='<U1')
非常感谢。我也会玩弄numpy! –
我们需要看到一个[MCVE。是元组元组的一个元组? –
'队'从哪里来? – arsho
最外层是元组还是列表? – James