2013-06-03 291 views
1

我從mysql數據庫中獲取數據到列表中。 現在的問題是,列表中有很多括號。從Python列表中刪除括號

我得到:

list = [['a'], ['b'], ['c']] 

我需要:

list = ['a', 'b', 'c'] 

任何想法如何格式化列表?

+1

http://stackoverflow.com/questions/952914/making-a-flat-list-out-of-list-of-lists-in-python – kirelagin

+11

這不是「太多的括號,「這是」我有一個列表清單。「告訴我們你是如何生成列表的,並且會告訴你如何改變它。 –

+0

確實。最好改變你生成數據的方式,而不是在之後嘗試和壓扁數據結構。 –

回答

14

一個簡單的列表理解應該做的工作:

my_list = [l[0] for l in list] 
3

您可以使用itertools

import itertools 
lst = [['a'], ['b'], ['c']] 
merged_list = list(itertools.chain(*lst)) 

此外,list是一個內置的類型。切勿使用list作爲變量名稱。

或按Lattyware的建議:

merged_list = list(itertools.chain.from_iterable(lst)) 
+0

你打敗了我! –

+2

'itertools.chain.from_iterable(x)'比使用'itertools.chain(* x)'更可取。 –

+0

請注意[itertools'文檔中的食譜](http://docs.python.org/2/library/itertools.html#recipes)有一個'flatten'函數,它顯示瞭如何做到這一點(這是當然,Lattyware的單線程)。 (如果你想壓平多層嵌套,請參閱PyPI上的'more-itertools'。) – abarnert

2
ll = [['a'], ['b'], ['c']] 
l = [x for y in ll for x in y] 
print l 

輸出:

['a', 'b', 'c'] 
1

下面的函數將壓平的任意元素和列表,包括列出,然後再包含列表的列表:

from collections import Iterable 

def flatten(l): 
    ret = [] 
    for i in l: 
     if isinstance(i, Iterable): 
      ret.extend(flatten(i)) 
     else: 
      ret.append(i) 
    return ret 
3

如果你處理的小清單:

>>> sum([['a'],['b'],['c']], []) 
['a', 'b', 'c'] 

但作爲列表變越大,演奏時間越慢。所以考慮到這一點:)

+0

爲什麼這是低調的? – TerryA