迭代时改变列表

时间:2012-07-18 02:40:39

标签: python

Python noob在这里。我有一个表示为字符串的数字列表。单个数字用零表示,我试图摆脱零。例如,['01','21','03']应为['1','21','3']。

我目前的解决方案似乎有点笨拙:

for item in list:  
    if item[0] == '0':     
        list[list.index(item)] = item[1]

我想知道为什么这不起作用:

for item in list:  
    if item[0] == '0':  
        item = item[1]

4 个答案:

答案 0 :(得分:4)

重新绑定迭代名称不会改变列表。

此外:

>>> [str(int(x, 10)) for x in ['01', '21', '03']]
['1', '21', '3']

答案 1 :(得分:3)

您可以尝试剥离零:

>>> map(lambda x: x.lstrip('0'), ['001', '002', '030'])
['1', '2', '30']

答案 2 :(得分:3)

改变名单:

for i, item in enumerate(mylist):  
    if item.startswith('0'):     
        mylist[i] = item[1:]

更好的可能只是创建一个新列表:

new_list = [x.lstrip('0') for x in mylist]

您的代码不起作用,因为分配给item只会给名称item一个新值,它对item的旧值没有任何作用。

答案 3 :(得分:-1)

代码“item”是一个变量,它在您遍历列表时包含项目的。它没有引用列表本身。

您的第一个解决方案非常慢,因为它必须在列表中搜索每个项目才能找到索引。

有关如何完成所需内容的示例,请参阅其他答案。