2013-05-02 95 views
1

我有一個包含具有標準格式的元組的列表:修改所有元組在Python列表

bar_list = [(bar1, bar2, bar3, bar4), (bar1, bar2, bar3, bar4), (bar1, bar2, bar3, bar4)...] 

雖然我想通過在列表中,每個每個元組進行迭代做出具體的修改,如:

foo0 = bar1 
foo1 = get_foo(foo0) #get_foo(var) being a function 
foo2 = bar2 
foo3 = bar3/2 

然後重新包裝重估元組中另一個列表:

foo_list = [(foo1, foo2, foo3), (foo1, foo2, foo3), (foo1, foo2, foo3)...] 

如何我能完成這個嗎?

+0

爲什麼不把它們追加到一個新的列表,因爲你做他們? – Patashu 2013-05-02 02:54:54

回答

5

你可以使用一個list comprehension

foo_list = [(get_foo(bar1), bar2, bar3/2) 
      for bar1, bar2, bar3, bar4 in bar_list] 

注意,我假設你的意思了foo1等於get_foo(bar1)而非NameError - 提高和自我參照

foo1 = get_foo(foo1) 
+0

謝謝unutbu,努力完美(我最終插入錯誤的變量,偉大的假設)! – Alpine 2013-05-02 03:16:11

-1

你可以在這裏使用map

def func(lis): 
    bar1,bar2,bar3,bar4=lis 
    foo0 = bar1 
    foo1 = get_foo(foo0) #or get_foo(bar1) 
    foo2 = bar2 
    foo3 = bar3/2 
    return foo1,foo2,foo3 


bar_list = [(bar1, bar2, bar3, bar4), (bar1, bar2, bar3, bar4), (bar1, bar2, bar3, bar4)...] 

foo_list = map(func,bar_lis) 
+0

太好了,我想你錯過了返回'foo0' – eLRuLL 2013-05-02 03:02:01

+0

@eLRuLL OP的預期輸出只有3個值:'(foo1,foo2,foo3)'。 – 2013-05-02 03:03:48

+0

哦,我沒有注意到,這是完美的。 – eLRuLL 2013-05-02 03:05:37