2013-06-21 65 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