遍历Python元组列表并修改值

4 投票
5 回答
20118 浏览
提问于 2025-04-17 18:13

我有这段代码

a=[(1,'Rach', 'Mell', '5.11', '160'),(2, 'steve', 'Rob', '6.1', '200'), (1,'Rach', 'Mell', '5.11', '160')]

我想把姓氏“Rob”改成“Roberto”,前提是id等于2。
所以我想把元组改成列表,这样更容易修改。

我试过:

a_len = len(a)
count = 0
a_list = []
while(count < a_len):
     a_list.append(a[count])
     count ++

for x, element in a_list:
     if element[0] == 2:
          a_list[x] = Roberto

但是这样不行,你们有没有什么好主意可以做到这一点?

谢谢!

5 个回答

2

试试这个:

a=[(1,'Rach', 'Mell', '5.11', '160'),(2, 'steve', 'Rob', '6.1', '200'), (1,'Rach', 'Mell', '5.11', '160')]

a_list = []
for ele in a:
    a_list.append(list(ele))

for ele in a_list:

    if ele[0] == 2:
        ele[2] = "Roberto"

print a_list
2

简短回答

a_list = [(_id, first, 'Roberto' if (last == 'Rob' and _id == 2) else last, x,y) for _id, first, last, x, y in a ]

这是Python中的列表推导式,它是Python一个非常棒的工具。

上面的代码和下面的代码意思是一样的:

a_list = []
for _id, first, last, x, y in a:

    if last == 'Rob' and _id == 2:
         last  =' Roberto'

    a_list.append((_id, first, last, x, y))
5

这个代码可以做到:

a=[(1,'Rach', 'Mell', '5.11', '160'),(2, 'steve', 'Rob', '6.1', '200'), (1,'Rach', 'Mell', '5.11', '160')]

for i,e in enumerate(a):
    if e[0]==2: 
        temp=list(a[i])
        temp[2]='Roberto'
        a[i]=tuple(temp)

print a        

输出结果是:

[(1, 'Rach', 'Mell', '5.11', '160'), (2, 'steve', 'Roberto', '6.1', '200'), (1, 'Rach', 'Mell', '5.11', '160')]

如果你想用列表推导式,可以这样写:

>>> [t if t[0]!=2 else (t[0],t[1],'Roberto',t[3],t[4]) for t in a]
[(1, 'Rach', 'Mell', '5.11', '160'), (2, 'steve', 'Roberto', '6.1', '200'), (1, 'Rach', 'Mell', '5.11', '160')]

撰写回答