我想用零长度字符串替换input
的Null值。我的代码似乎没有任何效果。我错过了什么?
None
答案 0 :(得分:2)
不幸的是,您目前所做的只是将变量y
设置为完全不同的字符串''
,这与您的原始列表完全没有关系,并且当您继续时,信息完全丢失迭代。要完全替换所有这些,可以使用索引进行循环。
for i in range(len(mylist)):
for j in range(len(mylist[i])):
if mylist[i][j] == None:
mylist[i][j] = ''
答案 1 :(得分:2)
你错误地做了,当迭代一个列表时,你得到了list元素,试图在循环中设置它并没有在实际列表中改变它,你需要获取该元素的索引并将其更改为在列表中,您可以使用enumerate
函数。
示例 -
mylist = [[2,3,None],[None,3,4]]
for x in mylist:
for i,y in enumerate(x):
if y is None:
x[i] = ''
print mylist
>> [[2, 3, ''], ['', 3, 4]]
答案 2 :(得分:1)
变量y
只是对列表中相应元素的临时读取访问权限。如果您想更改列表值,请尝试通过计数器直接访问它们。
下面的代码重新组装整个嵌套列表,这是另一种选择:
mylist = [[2,3,None],[None,3,4]]
mylist = [[yI if yI is not None else '' for yI in xI] for xI in mylist]
答案 3 :(得分:0)
我个人不喜欢在迭代它们时改变列表,返回一个新列表就是标准库中的每个函数。这是一个函数,它将返回一个新的列表,其中所需的元素被替换,它将适用于任何“深度”的列表,因为缺少更好的单词
def list_replace(old_list, replace=None, replace_with=''):
new_list = []
for elem in old_list:
if isinstance(elem, list):
new_list.append(list_replace(elem))
else:
new_list.append(replace_with if elem == replace else elem)
return new_list