如何在python中的每个列表/元组中修改第一个值?

时间:2019-04-02 23:28:24

标签: python python-3.x

我有一个列表/元组的列表,例如:

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)

注意:我也可以对原始对象进行变异。

2 个答案:

答案 0 :(得分:6)

您可以使用enumerate遍历objects来使用索引对其进行修改:

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

objects变为:

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

答案 1 :(得分:1)

只需在适当位置修改列表即可

for i, object in enumerate(objects):
    objects[i] = (str(object[0]), object[1], object[2])