python - 替换列表python列表中的元素
问题描述
我有一个列表如下:
list=[]
*some code to append elements to list*
list=[['a','bob'],['a','bob'],['a','john']]
我想浏览这个列表并将“bob”的所有实例更改为“b”并保持其他实例不变。
for x in list:
for a in x:
if "bob" in a:
a.replace("bob", 'b')
打印出 x 后仍然和 list 一样,但不是如下:
list=[['a','b'],['a','b'],['a','john']]
为什么更改没有反映在列表中?
解决方案
因为str.replace
不能就地工作,所以它返回一个副本。作为不可变对象,您需要将字符串分配给列表列表中的元素。
如果您通过以下方式提取索引整数,则可以直接分配给您的列表列表enumerate
:
L = [['a','bob'],['a','bob'],['a','john']]
for i, x in enumerate(L):
for j, a in enumerate(x):
if 'bob' in a:
L[i][j] = a.replace('bob', 'b')
结果:
[['a', 'b'], ['a', 'b'], ['a', 'john']]
更多 Pythonic 将是使用列表推导来创建一个新列表。例如,如果只有两个值中的第二个包含需要检查的名称:
L = [[i, j if j != 'bob' else 'b'] for i, j in L]
推荐阅读
- php - 视图在 laravel 中不起作用
- excel - 在 VBA 中将文本转换为日期会产生时间值
- python - 尝试在 Python 中不提供用户名/密码凭据的情况下测试数据库连接
- python - 为什么我的while循环只运行一次?
- gnuplot - 节省时间 - 编译 c++ 并同时绘图 gnuplot
- javascript - 如何使 Laravel/Vue 实现显示单个条目
- json - 在 Google Cloud Storage 端点上获得 500
- bash - 在未压缩的 .tar 中编辑文本文件
- batch-file - 批处理 - 从目录 /b 返回完整路径
- python - 全屏启动程序 (Python)