您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

For循环中的Python列表

For循环中的Python列表

您可以使用其索引更新列表项:

for i, url in enumerate(urls):
    if "javascript" in url:
        urls[i] = url.replace('javascript:l("','').replace('");','-Texas.html')

另一种选择是使用列表理解:

def my_replace(s):
    return s.replace('javascript:l("','').replace('");','-Texas.html')

urls[:] = [my_replace(url) if "javascript" in url else url for url in urls]

urls[:]意味着用urls列表理解创建的新列表替换列表的所有项目。

您的代码无法正常工作的原因是,您正在将变量分配给url其他对象,并且将对象的引用之一更改为指向其他对象不会影响其他引用。因此,您的代码等效于:

>>> lis = ['aa', 'bb', 'cc']
>>> url = lis[0]                   #create new reference to 'aa'
>>> url = lis[0].replace('a', 'd') #Now assign url to a new string that was returned by `lis[0].replace`
>>> url 
'dd'
>>> lis[0]
'aa'

还要注意,str.replace总是返回一个新的字符串副本,它永远不会更改原始字符串,因为字符串在Python中是不可变的。如果lis[0]是列表,并且您使用.append.extend等对它执行了任何就地操作,那么这也将影响原始列表。

python 2022/1/1 18:38:37 有247人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶