Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python元组是可修改的吗?_Python - Fatal编程技术网

python元组是可修改的吗?

python元组是可修改的吗?,python,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 =

我正在读取和解析一些数据。基本上,数据是一堆整数和字符串,所以我不能只用一个列表来存储数据。每组数据中都有一定数量的项,但有时会丢失一些项。这是我的

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))

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

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

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

Python元组是不可变的。从:

元组和字符串一样是不可变的:不可能将其分配给元组的各个项(不过,您可以通过切片和串联模拟大致相同的效果)。还可以创建包含可变对象(如列表)的元组

这是将它们与列表区分开来的主要原因。这很好地引出了一个可能的解决方案:使用列表代替元组:

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

如果您必须使用元组(尽管其他人已经说过,列表应该可以正常工作),只需将数据存储到临时变量中,并在循环结束时使用临时变量从头创建元组,而不是在循环开始时使用伪值。

从您的代码看,第一个字段“id”似乎永远不会丢失。 假设您确实需要一个元组来传递给您的用户类

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

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

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

“基本上,数据是一组整数和字符串,因此我不能仅使用列表来存储数据。”是否要解包?元组是不可变的,但如果需要将内容存储为元组,您始终可以先将其创建为列表,然后调用
tuple(list)
。类实例的可能副本基本上都是美化的tuple;)请注意,
如果单词[index]='m'或单词[index]='f':
也不是pythonic。如果('m','f')中的单词[index]出现,请尝试
。您似乎也在大量增加索引。你可以少做一点,或者更好,使用for循环。幽默的但毫无帮助。问题的关键是最后一句话:“问题是你似乎不能直接分配给元组(比如
data[1]=“missing”
),那么应该如何以pythonic的方式分配呢?”当我投了反对票时,你的回答只是“那是正确的,元组是不可变的。”不幸的是,看起来您正在同时编辑您的问题。我会根据您的编辑删除我的否决票,但我的投票被锁定。很抱歉如果您再次编辑您的问题,请在评论中ping我,我将删除我的downpoite.Yikes。我不知道你可以把不同的类型放到一个列表中。很抱歉这个简单的问题,谢谢!不需要道歉。只有学会了,事情才会变得容易!“无法修改其项目”为false。元组可以包含可变对象,例如,
tup=([]);tup[0]。追加(1)
您不能分配给单个项目,例如,
tup[0]=“XXX不起作用”
。文档中的片段明确提到了这两点。@J.F.Sebastian嗯,我不是那个意思。我现在已经删除了我的解释,让医生们自己说话。