2013-06-21 134 views
3

我的問題似乎很簡單,但對於一個新手像我這條巨蟒開始變得太複雜,我得到的,所以這裏的情況:Python列表索引分裂和操縱

我需要一個列表,例如作爲:

L = [(a, b, c), (d, e, d), (etc, etc, etc), (etc, etc, etc)] 

並使每個索引單獨列表,以便我可以從每個索引具體拉動元素。問題是,我其實有工作列表包含數百個指標如那些上面,我不能讓這樣的:

L_new = list(L['insert specific index here']) 

爲每一個因爲這將意味着與相應的數百名單填滿記憶到第一個列表的單個索引,並且從我的角度來看,太耗費時間和內存。所以我的問題是,如何分開這些索引,然後從它們中提取單個部分,而無需創建數百個單獨的列表(至少不需要數百個單獨的行來創建它們)。

+5

您不必爲此做任何事。你可以添加另一個索引,它會起作用。 L [0] [0]會給a,L [0] [1]會給b,L [2] [1]會給等等 –

回答

3

我可能會被誤讀了你的問題,但我傾向於說你實際上並不需要做什麼才能夠索引你的元組。見我的評論,但:L[0][0]會給"a"L[0][1]會給"b"L[2][1]會給"etc"等等

如果你真的想要一個乾淨的方式把它變成一個列表的列表,你可以使用列表理解:

cast = [list(entry) for entry in L] 

迴應你的評論:如果你想跨維度訪問,我會建議列表理解。對於您的評論明確:

crosscut = [entry[0] for entry in L] 

針對註釋2:這主要是所謂的切片一個非常有用的操作的一部分。具體做參考的操作你可以這樣做:

multiple_index = [entry[0:3] for entry in L] 

根據您的喜好可讀性,實際上有許多的可能性在這裏:

list_of_lists = [] 
for sublist in L: 
    list_of_lists.append(list(sublist)) 

iterator = iter(L) 
for i in range(0,iterator.__length_hint__()): 
    return list(iterator.next()) 
    # Or yield list(iterator.next()) if you want lazy evaluation 
+0

這是一個好的開始,因爲我不知道這可以在Python的,所以我感謝你的知識,但我仍然想知道如何有效地調用(例如)L [:] [0],這將拉動從列表中的所有指數*的工作? *(a只是一個例子,假設它是括號中的第一個索引) – ImmortalxR

+1

@ user2494237查看更新的響應 –

+0

非常感謝,完全解決了該更新響應的問題!好吧,大概哈哈,我可以爲crosscut分配幾個'條目',例如[條目[0,1,2]用於輸入L]? – ImmortalxR

2

你有什麼有一個元組列表,請訪問他們像一個列表的列表

L[3][2] 

會得到從3元組的第二個元素在你的列表L

2

兩個內部採用的方式清單:

for index, sublist in enumerate(L): 
    # do something with sublist 
    pass 

或迭代器

iterator = iter(L) 
sublist = L.next() # <-- yields the first sublist 

在兩種情況下,sublist元件可以經由

  • 直接指數達到

sublist[2] 
  • 迭代

iterator = iter(sublist) 
iterator.next() # <-- yields first elem of sublist 

for elem in sublist: 
    # do something with my elem 
    pass