python - 如何修改python中每个列表/元组中的第一个值?
问题描述
我有一个列表/元组列表,例如:
objects = [
(1, "a", "foo"), # or I can make [1, "a", "foo"] instead
(20, "bb", "bar"),
(1231, "cde", "foo2"),
]
现在我想修改每个元组的第一个值(例如,做一个简单的to_string
转换):
objects = [
("1", "a", "foo"), # or I can make [1, "a", "foo"] instead
("20", "bb", "bar"),
("1231", "cde", "foo2"),
]
目前我创建了一个全新的列表:
objects_str = []
for object in objects:
objects_str.append((str(object[0]), object[1], object[2]))
有更清洁的方法吗?我考虑过使用namedtuple
,但看起来它们也是不可变的。另一种选择可能是使用:
objects_str = []
for object in objects:
object[0] = str(object[0])
objects_str.append(object)
注意:我也可以改变原始对象。
解决方案
您可以使用enumerate
迭代objects
以使用索引就地修改它:
for i, (first, *rest) in enumerate(objects):
objects[i] = str(first), *rest
objects
变成:
[('1', 'a', 'foo'), ('20', 'bb', 'bar'), ('1231', 'cde', 'foo2')]
推荐阅读
- c++ - c 使用宏名作为变量名
- java - 如何检查列表中的数字是否大于并延续到列表中的下一个数字
- django - 在较旧的 Postgres (9.4) 上使用 Django 3+
- azure - Azure Log Analytics 查询用户的 api 调用
- java - 使用 AccessControlException 拒绝 Elastic APM 代理访问
- javascript - MatSlideToggle:toggle() 不会触发更改侦听器
- c++ - 指针向量 vs 对象向量 vs 堆上的向量
- node.js - 试图通过socketio将php连接到节点服务器
- python - VS 代码 - 上下文操作
- c - C 预处理器:为什么在 # 运算符的标记和结果之间有额外的空间?