首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用元组交换对象- python

用元组交换对象- python
EN

Stack Overflow用户
提问于 2017-10-13 11:38:12
回答 3查看 936关注 0票数 3

我有以下形式的元组:

代码语言:javascript
复制
a[i][j][k]

K∈0,1 a是由对象T组成的,这些对象包括在一个列表组中。

我想要的是,交换所有对ai和ai1的位置。因此:

代码语言:javascript
复制
a[i][j][0], a[i][j][1] = a[i][j][1], a[i][j][0]

作为一个元组,我理解它是不可变的,这就是为什么它不起作用的原因:

代码语言:javascript
复制
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]

我试过把a转换成列表(L = list(a)),但没有成功。

有人能帮我提些建议吗?对不起,如果我的命名方法还不完善,这是我的第一个问题:)

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-13 11:48:11

假设atuples of tuples的tuple

我会的

  • 将其转换为列表列表
  • 做我想做的事
  • 如果需要,可以将其转换回原始格式。

示例:

代码语言:javascript
复制
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)

结果:

代码语言:javascript
复制
[[[1, 2], [3, 4]], [[10, 20], [30, 40]]]
(((2, 1), (3, 4)), ((10, 20), (30, 40)))

如您所见,元组被转换为list,工作,然后转换回元组。

编辑:如果a是元组列表,则不能:

代码语言:javascript
复制
a[i][j][0], a[i][j][1] = a[i][j][1], a[i][j][0]

但是您可以重新创建内部元组:

代码语言:javascript
复制
a[i][j] = a[i][j][1],a[i][j][0]
票数 4
EN

Stack Overflow用户

发布于 2017-10-13 12:02:11

我们只需使用Python的反转就可以做到这一点

代码语言:javascript
复制
a[j][k] = tuple(reversed(a[j][k]))
票数 1
EN

Stack Overflow用户

发布于 2017-10-13 12:02:34

问题

元组的确是不可变的。a可能是一个列表,甚至是一个列表列表。所以这个代码:

代码语言:javascript
复制
L = list(a)

不会有任何改变。问题似乎是,a是一个元组列表。a[i][j]是一个元组,不可能为它分配新的值:

代码语言:javascript
复制
>>> 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

可能解决办法

如果你在处理三维矩阵,numpy可能会帮助你.它支持高级分度和切片

代码语言:javascript
复制
>>> 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]]])

矩阵中的元素不必是数字,它们可以是任何对象:

代码语言:javascript
复制
>>> 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')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46729069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档