python - 在 python 中使用 range 关键字遍历列表和使用其他变量之间有区别吗?
问题描述
我正在尝试制作一个程序,在我的字符串的每一行前面添加一个“*”。
这就是我所做的:
text = "Lists of animals, Lists of aquarium life"
lines = text.split(',')
for l in lines:
l = '* ' + l
print(lines)
这给出了输出:
['Lists of animals', 'Lists of aquarium life']
但是,如果我在我使用的地方做一个简单的改变:
for i in range(len(lines)):
lines[i] = '* ' + lines[i]
print(lines)
这给了我想要的输出:
['* Lists of animals', '* Lists of aquarium life']
为什么会这样?只有当我通过 range 方法遍历列表时,我才能对列表进行就地更改?
谢谢您的帮助。
解决方案
因为工作方式for l in lines: l = '* ' + l
是这样的:
for i in range(len(lines)):
l = lines[i]
l = '* ' + l
因此,如果您将任何内容分配给l
,它不会影响lines[i]
。
如果您不想使用该range
方法,请改用列表推导:
lines = ['* ' + l for l in lines]
推荐阅读
- django - Django Rest Framework JWT - 公开一些带有身份验证的 api
- visual-studio-2015 - Itk 区域种植种子点
- reactjs - useState 钩子的 setState 的功能版本不会导致重新渲染
- javascript - React & Canvas:如何更新状态?
- javascript - React Native 中的布局设计图标
- c# - 如果文本超过三行,如何截断文本?
- android - 未在房间数据库中创建表
- java - 如果我在循环内以编程方式运行垃圾收集器。它会影响我的 Android 应用程序吗?
- javascript - Image Slider JS 的一些问题
- c# - 如何在 NHibernate 中使用 sql 查询创建表?