15

我正在寻找一种干净的方法来迭代一个元组列表,其中每个元组都是这样的一对[(a, b), (c,d) ...]。最重要的是,我想更改列表中的元组。

标准做法是避免在迭代列表的同时更改列表,那么我该怎么办?这就是我想要的:

for i in range(len(tuple_list)):
  a, b = tuple_list[i]
  # update b's data
  # update tuple_list[i] to be (a, newB)
4

3 回答 3

33

只需替换列表中的元组;只要避免添加或删除元素,就可以在循环列表时更改它

for i, (a, b) in enumerate(tuple_list):
    new_b = some_process(b)
    tuple_list[i] = (a, new_b)

b或者,如果您可以像我上面所做的那样将更改汇总到一个函数中,请使用列表推导:

tuple_list = [(a, some_process(b)) for (a, b) in tuple_list]
于 2013-02-14T17:09:59.420 回答
4

你为什么不去列表理解而不是改变它?

new_list = [(a,new_b) for a,b in tuple_list]
于 2013-02-14T17:09:56.820 回答
0

这里有一些想法:

def f1(element):
    return element

def f2(a_tuple):
    return tuple(a_tuple[0],a_tuple[1])

newlist= []
for i in existing_list_of_tuples :
    newlist.append( tuple( f1(i[0]) , f(i1[1]))

newlist = [ f2(i) for i in existing_list_of_tuples ]
于 2013-02-14T17:10:08.177 回答