将元组转换为python3中的列表并进行修改

时间:2016-05-03 23:18:32

标签: python list python-3.x tuples python-3.4

这是python 3。

让我们说我有一个元组

tup = (1, 2, 3)

这个元组存储在一个列表中:

a = []
a[0] = tup

我在列表a上进行迭代。我需要做的是修改tup的内容。也就是说,我希望更改值,同时将其保留在列表a中。 这是对的吗?

tmp = list(a[0])
tmp[0] = 0 # Now a[0] = (0, 2, 3)

此外:我知道元组被设计为不可变的,并且列表可能更适合tup而不是元组。但是,使用append向列表中添加元素我感到很不舒服:列表存储了固定大小的元素,元组是更好的代表。我宁愿手动将内容添加到列表中,例如tup[0] = blah而不是tup.append(blah)

1 个答案:

答案 0 :(得分:0)

答案很简单。你不能,这样做没有任何意义。列表是可变的,元组不是。如果您希望a的元素是可变的,请将它们作为列表,例如a = [[1,2,3],...]

如果你真的想把它们作为元组,但是改变它们,你可以沿着[0] =(0,)+ a [0] [1:]的行做一些事情。这会在列表中创建一个 new 元组,并且效率低于仅使用列表列表。

  

此外:我知道元组被设计为不可变的,并且列表可能更适合tup而不是元组。

是。

  

但是,使用append将元素添加到列表中我感到很不舒服:列表存储了固定大小的元素,元组是更好的代表。

我不确定你的意思。您的意思是a是固定大小,还是a的元素是固定大小的?在任何一种情况下,这如何使元组更好?

这里的混淆可能是Python中的列表不是计算机科学意义上的列表;它们实际上是数组。它们是用于检索的O(1),用于设置元素的O(1),并且通常是O(1)用于追加,除非它们需要调整大小。

  

我宁愿手动添加东西到tup [0] = blah而不是tup.append(blah)

不能使用元组执行此操作,但您可以使用列表执行 ,并且它们都在O(1)周围。

如果你真的想要固定大小的可变数组,你可以看看numpy,或者你可以初始化设置大小的python列表。