假设我有一个清单:
a=[1,2,3,4,5]
现在我想将此列表转换为元组。我认为像这样的编码可以做到:
state=()
for i in a:
state=state+i
它出错了。很明显为什么,我我尝试将整数与元组连接起来。
但元组与list不具有相同的功能,如insert或append。 那么如何通过循环添加元素呢?字典也一样,我觉得好像缺少链接。
答案 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,我是新的:)