我使用itertools.zip_longest将一些数据压缩在一起
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_up,则会得到以下信息:
[('Tim', 'DE', False), ('Bob', 'ES', True),
('Julian','AUS', True), ('Carmen', 'NL', False),
('Sofia', 'BR',True), ('Mike', 'US', None),
('Kim',None, None),('Andre', None, None)]
这很好,缺少的值默认设置为“无”。 现在,我想将“无”值更改为“-” 。
似乎我应该能够在以下嵌套循环中这样做。如果我在下面的代码中包含一条打印语句,那么一切似乎都可以按照我想要的方式工作:
for items in zipped_up:
for thing in items:
if thing == None:
thing = '-'
print(thing)
但是,如果我再次打印zipped_up(在循环之外),则“ None”值没有改变。为什么不?与列表项的数据类型(元组)有关吗?
我引用了其他一些stackoverflow线程,包括此线程,但无法使用它: finding and replacing elements in a list (python)
答案 0 :(得分:4)
只需使用element = element.toUpperCase()
参数:
fillvalue
答案 1 :(得分:3)
首先,您尝试更改元组中的元素,但是元组是不可变对象。
“更改”它们的唯一方法是在现有的基础上创建 new 。
第二,这部分代码
for thing in items:
if thing == None:
thing = '-'
仅替换变量 thing
的内容,因此即使您在zipped_up
列表中具有 mutable 对象-例如(嵌套)列表-您的代码无论如何都不会更改。
因此,如果您出于某种原因不想接受solution of sacul而是编辑循环方法,则可以将新创建的元组追加到新的空列表中
如下面的代码(不是很好)所示:
result = []
for a, b, c in zipped_up:
a = '-' if a is None else a
b = '-' if b is None else b
c = '-' if c is None else c
result.append((a, b, c))
print(result)
输出:
[('Tim','DE',False),('Bob','ES',True),('Julian','AUS',True),('Carmen','NL',False ),('Sofia','BR',True),('Mike','US','-'),('Kim','-','-'),('Andre','-' ,'-')]