37

假设我有一个列表:

a=[1,2,3,4,5]  

现在我想把这个列表转换成一个元组。我认为编码这样的事情会做:

state=()  
for i in a:  
    state=state+i

它给出了一个错误。很明显,为什么我试图将一个整数与一个元组连接起来。

但是元组没有与列表相同的功能,例如插入或追加。那么如何通过循环添加元素呢?字典也是如此,我觉得好像我缺少了一个链接。

4

7 回答 7

80

元组是不可变的,您根本无法附加、删除或编辑它们。如果你想把一个列表变成一个元组,你可以使用 tuple 函数:

tuple(a)

如果出于某种原因,您觉得需要追加到元组(您永远不应该这样做),您可以随时将其转回列表,追加,然后将其转回元组:

tuple(list(a)+b)

不断获得投票,这意味着人们不断看到它,所以是时候更新和删除错误信息了。

可以将元素添加到元组(有点)。说这话很傻。元组仍然是不可变的,您无法编辑它们,但是您可以通过将多个元组放在一起来创建看起来像您附加的新元组。tuple(list(a)+b)很愚蠢,不要那样做。只是做tuple1 + tuple2,因为 Python 不烂。对于提供的代码,您需要:

state = ()  
for i in a:  
    state += (i,)

保罗对这个答案的回应比这个答案更正确。

现在我可以停止为此感到难过。

于 2012-05-05T06:07:53.380 回答
16
state=()  
for i in a:  
    state=state+(i,)

上面的代码将在每次新的tuple (i,)元组状态时连接起来。

我正在使用 python 2.7.9。

于 2015-01-18T15:21:50.740 回答
6
>>> a = [1,2,3,4,5]
>>> tuple(a)
(1, 2, 3, 4, 5)
于 2012-05-05T06:06:30.773 回答
3

只是一种 precis:(2,)实际上是一样的,tuple([2])所以你可以写:

>>>(2,) + tuple([2,3])
(2, 2, 3)
>>> tuple([2]) + (2,3)
(2, 2, 3)
>>> tuple([2]) + tuple([2,3])
(2, 2, 3)

python确实很柔顺

于 2016-01-04T14:35:49.943 回答
1

元组在 python 中是不可变的。

所以在你用 tuple(...) 初始化它之后,它就不能被修改了。

a = [1,2,3,4,5]
tuple(a) 
于 2012-05-05T06:08:31.957 回答
1

如果您想要一个通用的解决方案,只需建立一个新列表,然后在完成后将其转换为元组。

您可以使用 Josia 和 byron 的答案中提供的解决方案逐步构建您的元组,但这将为每次迭代创建一个新元组,如果您要转换的列表很大,则效率非常低,因为解释器必须复制在每次迭代中,从旧元组到新元组的所有元素都需要 O(n^2) 操作。

列表不会发生这种情况,因为 python 实际上会分配比仅存储列表元素所需的更多内存,以防万一您追加。好吧,至少在内存用完并且python必须分配更多内存之前没有必要。然后它将分配一大块内存并将所有元素移动到新位置,但是这块新内存将再次大于仅存储列表元素所需的内存。以这种方式建立一个列表只需要 O(n) 操作,因此是首选。

于 2016-06-21T17:03:53.880 回答
0

在构建具有灵活张量形状的 C/NN 时遇到类似问题后,我想我为这个问题构建了最通用的解决方案:

def cat(*args):
  x = ()
  for a in args:
    if type(a) is tuple:
      x+=a
    elif type(a) in {list,numpy.ndarray}:
      x+=tuple(a)
    else:
      x+=(a,)
  return tuple(x)

演示:

In [0]: cat(1,(1,2),(3,4),[1,2],2)
Out[0]: (1, 1, 2, 3, 4, 1, 2)

不知道这是否是坏蟒蛇,我是新人:)

于 2016-07-05T04:20:55.887 回答