我正在尋找一種乾淨的方式來迭代元組列表,其中每個元組都像這樣[(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)
我正在尋找一種乾淨的方式來迭代元組列表,其中每個元組都像這樣[(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)
只需替換列表中的元組;你可以改變列表,而遍歷它,只要你避免添加或刪除元素:
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]
你爲什麼不走了列表理解,而不是改變它呢?
new_list = [(a,new_b) for a,b in tuple_list]
這裏有一些想法:
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 ]
爲什麼只有'(...)'會使用'tuple(...)'? – 2013-02-14 17:11:25
只是爲了更具可讀性。那裏有一大堆括號。 – 2013-02-14 17:58:23
我不認爲這是更可讀;它反而分散注意力,它使我認爲你將另一個序列類型轉換爲一個元組。 – 2013-02-14 17:59:13
好了,你沒有真正有一個更新列表,你只更新元組。 – 2013-02-14 17:07:52
對,就像'tuple_list [i] =(a,newB)'......除了我想避免在循環內部這樣做。我很好奇,如果有更清潔的方式。 – Clev3r 2013-02-14 17:08:33
@Clever:你給的循環很好;它不會遍歷你正在更新的列表,而只是索引。這是使用列表的一種完全標準的方式,只要您不更改列表中的元素數量,而不是。 – 2013-02-14 17:11:19