连接元组

时间:2012-05-05 06:04:05

标签: python

假设我有一个清单:

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

现在我想将此列表转换为元组。我认为像这样的编码可以做到:

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

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

但元组与list不具有相同的功能,如insert或append。 那么如何通过循环添加元素呢?字典也一样,我觉得好像缺少链接。

7 个答案:

答案 0 :(得分:55)

元组是不可变的,你根本不能追加,删除或编辑它们。如果要将列表转换为元组,可以使用元组函数:

tuple(a)

如果出于某种原因,你觉得需要附加到一个元组(你永远不应该这样做),你总是可以把它变回一个列表,追加,然后把它变回一个元组:

tuple(list(a)+b)

继续为此投票,这意味着人们不断看到它,所以有时间更新并删除错误信息。

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

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

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

现在我可以不再为此感到难过了。

答案 1 :(得分:11)

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

每次新的tuple (i,)进入元组状态时,上面的代码都会连接起来。

我正在使用python 2.7.9。

答案 2 :(得分:5)

>>> a = [1,2,3,4,5]
>>> tuple(a)
(1, 2, 3, 4, 5)

答案 3 :(得分:2)

只是一种精确度:(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非常柔顺

答案 4 :(得分:1)

元组在python中不可变。

所以在用元组(...)初始化之后,它就无法修改。

a = [1,2,3,4,5]
tuple(a) 

答案 5 :(得分:1)

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

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

这不会发生在列表中,因为python实际上会分配更多内存,而不是仅仅存储列表元素所需的内存,以防你追加。好吧,至少没有必要直到内存耗尽并且python必须分配更多内存。然后它将分配一大块内存并将所有元素移动到新位置,但是这一新内存将再次大于仅存储列表元素所需的内存。以这种方式构建列表只需要O(n)操作,因此更喜欢。

答案 6 :(得分: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)

不确定这是不是很糟糕的python,我是新的:)