首页 > 解决方案 > 如何修改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)

注意:我也可以改变原始对象。

标签: pythonpython-3.x

解决方案


您可以使用enumerate迭代objects以使用索引就地修改它:

for i, (first, *rest) in enumerate(objects):
    objects[i] = str(first), *rest

objects变成:

[('1', 'a', 'foo'), ('20', 'bb', 'bar'), ('1231', 'cde', 'foo2')]

推荐阅读