ValueError迭代Python中的元组列表

时间:2014-09-24 18:15:23

标签: python python-2.7 iteration tuples

我有一个包含元组的列表,我想用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'个对象?

3 个答案:

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