Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.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/8/python-3.x/19.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/2/visual-studio-2010/4.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_Python 3.x - Fatal编程技术网

Python-更改列表中的项值

Python-更改列表中的项值,python,python-3.x,Python,Python 3.x,我用itertools.zip_压缩了一些数据 import itertools names = 'Tim Bob Julian Carmen Sofia Mike Kim Andre'.split() locations = 'DE ES AUS NL BR US'.split() confirmed = [False, True, True, False, True] zipped_up = list(itertools.zip_longest(names, locations, confi

我用itertools.zip_压缩了一些数据

import itertools
names = 'Tim Bob Julian Carmen Sofia Mike Kim Andre'.split()
locations = 'DE ES AUS NL BR US'.split()
confirmed = [False, True, True, False, True]
zipped_up = list(itertools.zip_longest(names, locations, confirmed))
如果按现在的方式打印zipped_,我会得到以下结果:

[('Tim', 'DE', False), ('Bob', 'ES', True), 
('Julian','AUS', True), ('Carmen', 'NL', False), 
('Sofia', 'BR',True), ('Mike', 'US', None), 
('Kim',None, None),('Andre', None, None)]
这很好,缺少的值默认为“无”现在我想将“无”值更改为“-”

看起来我应该能够在下面的嵌套循环中这样做。如果我在下面的代码中包含一个print语句,那么看起来一切都按照我想要的方式工作:

for items in zipped_up:
    for thing in items:
        if thing == None:
            thing = '-'
        print(thing)

但是如果我再次打印Zippped_(在循环之外),则“None”值没有改变。为什么不呢?这和列表项的数据类型(即元组)有关吗

我引用了其他一些stackoverflow线程,包括这一个,但无法使用它:

只需使用
fillvalue
参数:

zipped_up = list(itertools.zip_longest(names, locations, confirmed, fillvalue='-'))

>>> zipped_up
[('Tim', 'DE', False), ('Bob', 'ES', True), ('Julian', 'AUS', True), ('Carmen', 'NL', False), ('Sofia', 'BR', True), ('Mike', 'US', '-'), ('Kim', '-', '-'), ('Andre', '-', '-')]

只需使用
fillvalue
参数:

zipped_up = list(itertools.zip_longest(names, locations, confirmed, fillvalue='-'))

>>> zipped_up
[('Tim', 'DE', False), ('Bob', 'ES', True), ('Julian', 'AUS', True), ('Carmen', 'NL', False), ('Sofia', 'BR', True), ('Mike', 'US', '-'), ('Kim', '-', '-'), ('Andre', '-', '-')]

首先,您试图更改元组中的元素,但元组是不可变的对象。
“改变”它们的唯一方法是在现有的基础上创建新的

第二,这部分代码

for thing in items:
    if thing == None:
        thing = '-'
仅替换变量
thing
的内容,因此即使在
压缩列表中有可变对象(例如(嵌套)列表),代码也不会更改它们

因此,如果您出于任何原因不想接受,而是想编辑循环中的循环方法,您可以将新创建的元组附加到新的空列表中

如以下代码(不是很好):

输出:

[('Tim','DE',False),('Bob','ES','True),('Julian','AUS','True),('Carmen','NL','False),('Sofia','BR','True),('Mike','US','-','-',('Kim','-','-'),('Andre','-','


首先,您试图更改元组中的元素,但元组是不可变的对象。
“改变”它们的唯一方法是在现有的基础上创建新的

第二,这部分代码

for thing in items:
    if thing == None:
        thing = '-'
仅替换变量
thing
的内容,因此即使在
压缩列表中有可变对象(例如(嵌套)列表),代码也不会更改它们

因此,如果您出于任何原因不想接受,而是想编辑循环中的循环方法,您可以将新创建的元组附加到新的空列表中

如以下代码(不是很好):

输出:

[('Tim','DE',False),('Bob','ES','True),('Julian','AUS','True),('Carmen','NL','False),('Sofia','BR','True),('Mike','US','-','-',('Kim','-','-'),('Andre','-','


“为什么不呢?这和列表项的数据类型(即元组)有关吗?”不,一点也不
thing='-'
只是将值
'-'
赋给局部变量
thing
,您不应该期望它会影响正在迭代的列表。肯定有重复的地方,但我建议你阅读,你可以在压缩和你的目标之前发布原件,也许有更好的方法,最好的方法是使用
fillvalue
。但是您可以通过重新生成输出来进行转换,例如,对于压缩的项目,
[[thing or'-'for thing in items]
,或者对于压缩的项目,
[tuple(thing or'-'for thing in items)]
如果您需要内部序列是元组。@PM2Ring我们不是只使用
zip\u longest
over
zip
来利用
fillvalue
作为开头吗?@vash\u类似踩踏。它的主要用途是,当最短源iterable完成时,压缩列表不会完成,但要完成这一点,我们需要某种填充值。“为什么不呢?这与列表项的数据类型有关,它们是元组吗?”不,一点也不
thing='-'
只是将值
'-'
赋给局部变量
thing
,您不应该期望它会影响正在迭代的列表。肯定有重复的地方,但我建议你阅读,你可以在压缩和你的目标之前发布原件,也许有更好的方法,最好的方法是使用
fillvalue
。但是您可以通过重新生成输出来进行转换,例如,对于压缩的项目,
[[thing or'-'for thing in items]
,或者对于压缩的项目,
[tuple(thing or'-'for thing in items)]
如果您需要内部序列是元组。@PM2Ring我们不是只使用
zip\u longest
over
zip
来利用
fillvalue
作为开头吗?@vash\u类似踩踏。它的主要目的是使压缩列表在最短源iterable完成时不会完成,但要做到这一点,我们需要某种填充值。这个问题的重要方面可能是解释OP的尝试没有完成的原因work@juanpa.arrivillaga但是我们可以说,如果不使用
fillvalue
,他为什么还要使用
zip
而不是
zip
?当然,我肯定要指出,但你只是让他们对语言的语义产生了根本性的误解,这个问题的重要方面可能是解释为什么OP的尝试没有成功work@juanpa.arrivillaga但是我们可以说,如果不使用
fillvalue
,为什么他会使用
zip
而不是
zip
?当然,我肯定会指出,但你只是让他们对语言的语义有一个基本的误解,并给他们一个替代的解决方案。