python元组是否可以修改?

时间:2012-03-14 20:52:05

标签: python

我正在阅读并解析一些数据。基本上,数据是一堆整数和字符串,所以我不能仅使用列表来存储数据。每组数据中都有一定数量的项目,但有时会遗漏一些项目。这就是我所拥有的。

users = [] # list of objects I'll be creating

# this all gets looped.  snipped for brevity
data = "id", "gender", -1 # my main tuple that I will create my object with
words = line.split()
index = 0
data[0] = words[index]
index += 1
if words[index] == "m" or words[index] == "f":
    data[1] = words[index]
    index += 1
else:
    data[1] = "missing"

if words[index].isdigit():
    data[2] = words[index]
    index += 1

users.append(User(data))

问题是您似乎无法直接分配给元组(例如data[1] = "missing"),那么应该如何以pythonic方式分配?

4 个答案:

答案 0 :(得分:4)

这是正确的,元组是不可变的。但是,您可以将任何不同的类型放入python列表中。

>>> a = []
>>> a.append("a")
>>> a.append(1)
>>> a.append(False)
>>> print a
['a', 1, False]

答案 1 :(得分:4)

Python元组是不可变的。来自documentation

  

元组与字符串一样,是不可变的:不可能分配给元组的各个项目(尽管如此,你可以模拟大小相同的切片和连接效果)。也可以创建包含可变对象的元组,例如列表。

这是使他们与名单区别开来的主要因素。这很好地解决了一个可能的解决方案:使用列表代替元组:

data = ["id", "gender", -1]

答案 2 :(得分:0)

如果你必须使用元组(虽然正如其他人所说,列表应该可以正常工作),只需将数据存储到临时变量并从头开始创建元组,而不是在开头结束时使用临时值带有虚拟值。

答案 3 :(得分:0)

从您的代码中,看起来第一个字段“id”永远不会丢失。 假设您真的想要一个传递给User类的元组。

您可以先进行检查,然后将结果的总体分配给您的元组......

if words[1] in "mf":
    data=tuple(words[i] for i in range(0,3))
else:
    data=words[0],"missing",words[2]

但是请注意,后面的字段(如果存在)会正确分割,否则字段含义会混淆。

相关问题