我有一个包含元组的列表,我想用None
个字符串替换其中一个元组中的'None'
个对象。
这是我的代码:
x = [('hello','there'),(None,'world',None)]
for i in x:
for j in i:
if j is None:
n = x.index(i)
l = list(x[n])
m = x[n].index(j)
l[m] = 'None'
x[n] = tuple(l)
但是,它会引发错误:
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
ValueError: (None, 'world', None) is not in list
如何正确迭代元组以用None
个字符串替换'None'
个对象?
答案 0 :(得分:2)
>>> x = [('hello', 'there'),(None, 'world', None)]
>>> [tuple('None' if item is None else item for item in tup) for tup in x]
[('hello', 'there'), ('None', 'world', 'None')]
答案 1 :(得分:2)
第一次找到None
你跑
x[n] = tuple(l)
将(None,'world',None)
更改为('None','world',None)
。第二次找到None
你运行
x.index((None,'world',None))
但现在x是
x = [('hello','there'),('None','world',None)]
因此它不包含(None,'world',None)
,从而产生值错误
答案 2 :(得分:1)
在第一个None
值更改为'None'
后,j
仍为(None, 'world', None)
。您正在更新x[n]
,而不是j
。如果直接遍历x
,您的代码就会有效。
x = [('hello','there'),(None,'world',None)]
for i in range(len(x)):
for j in x[i]:
if j is None:
n = i
l = list(x[n])
m = x[n].index(j)
l[m] = 'None'
x[n] = tuple(l)