我想重塑以下列表:在一個「長格式」重塑蟒蛇不規則列表
wide_list = [[1,['a','b','c']],[2,['d','e']],[3,'f']]
:
long_list = [[1,'a'],[1,'b'],[1,'c'],[2,'d'],[2,'e'],[3,'f']]
這又如何在Python有效地實現?這可以用一個列表理解來完成
我想重塑以下列表:在一個「長格式」重塑蟒蛇不規則列表
wide_list = [[1,['a','b','c']],[2,['d','e']],[3,'f']]
:
long_list = [[1,'a'],[1,'b'],[1,'c'],[2,'d'],[2,'e'],[3,'f']]
這又如何在Python有效地實現?這可以用一個列表理解來完成
嘗試使用嵌套列表理解:
>>> wide_list = [[1,['a','b','c']],[2,['d','e']],[3, ['f']]]
>>> long_list = [[k, v] for k, sublist in wide_list for v in sublist]
>>> long_list
[[1, 'a'], [1, 'b'], [1, 'c'], [2, 'd'], [2, 'e'], [3, 'f']]
注意,在最後一組,就必須改變以匹配前兩組的格局。而不是[3, 'f']
,而是使用[3, ['f']]
。否則,對於不遵循該模式的組,您需要特殊的案例邏輯。
方式一:
>>> [[x[0],letter] for x in wide_list for letter in x[1]]
[[1, 'a'], [1, 'b'], [1, 'c'], [2, 'd'], [2, 'e'], [3, 'f']]
long_list = [[x[0],item] for x in wide_list for item in x[1]]
然而,this answer可能是最清楚的。
-1,因爲你的回答並不處理他的(wide_list)定義中的最終列表,然後+1來撤消它,因爲我意識到他錯誤地指定了這個問題。 –
@KirkStrauser沒問題,我真的注意到並去編輯,然後意識到它是規範,而不是我的代碼。無論哪種方式,雷蒙德的答案是最好的,國際海事組織。 – brc
你可以將'wide_list'重寫爲一個有效的Python列表嗎?你錯過了一個右括號,我不想假設它圍繞着最後的'f'。 –