2017-04-13 49 views
-2

我試圖分組複雜的嵌套元組,以便組合在列表中相同位置的元素。例如:分組的可變長度嵌套元組列表

original_list = [(("input00", "input01",...), "target0"), 
       (("input10", "input11",...), "target1"), ...] 

應該成爲:

grouped = [(["input00", "input10",...], 
      ["input01", "input11",...]), 
      ["target0", "target1",...]] 

目的是組一起(到一個列表),其發生在同一位置的元素。 type(grouped)本身可以是tuplelist(我認爲它應該很容易從一個元組轉換爲列表,無論如何)。例如,"input00"original_list[0][0][0]。我想把指數original_list[X][0][0]X = len(original_list))上的所有內容都放到一個列表中(所以"input00""input10"等)。

我想爲original_list[X][0][1]中的元素做同樣的事情,更一般地爲original_list[X][0][N],其中N = len(original_list[X][0])。部分原因是我難以實現這一點,因爲我很難用算法術語思考這個問題;如果您查看上面的第一個代碼塊,我直觀地只想將「同一列」中的所有內容分組在一起。

我試過弄平了這個,然後做了某種產品,但是它有點複雜,因爲"target0","target1"佔用的位置也不在嵌套元組中。另外,「輸入」元組長度可以有無限的事實給我帶來一些麻煩。

事情我已經嘗試過(我嘗試了一大堆那人甚至還沒有接近在給予正確解決其他的事情,所以我會在這裏省略掉):

In: list(itertools.chain(*original_list)) 
Out: [('input00', 'input01'), 'label0', ('input10', 'input11'), 'label1'] 
+0

向誰投降:你能解釋一下我怎樣才能更好地解決這個問題嗎? –

+0

你能否試着更好地解釋你的列表格式?什麼是「元組索引」? – lolopop

+0

顯示您嘗試的代碼和這些嘗試的輸出。 – Prune

回答

0

它看起來像你可能只需要一個轉置:

grouped = ([i[0] for i in original_list], [i[1] for i in original_list]) 

(這是不完全一樣在你的問題關於什麼是一個元組的格式,什麼是一個列表,但它是簡單的調整也,這個轉置是特定的。你輸入的格式 - 特別是它的輸入元組有2種元素。)

人們不得不寫轉置作爲

grouped = zip(*original_list) 
關於Python 3

list(zip(*original_list))的傾向,因爲它是所有短期和漂亮,你不必硬編碼有關的任何結構的輸入。但是,如果original_list爲空,zip無法推斷出它需要生成的結構,而grouped只能成爲空列表,這很可能會破壞事情。

+0

是的,這正是我想要的;這是非常有用的,非常感謝。 –