Python列表索引拆分和操作

时间:2013-06-21 15:17:42

标签: python arrays list

我的问题看起来很简单,但对于像我这样的蟒蛇新手来说,这对我来说太复杂了,所以情况就是这样:

我需要列出如下列表:

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

并使每个索引成为单独的列表,以便我可以专门从每个索引中提取元素。问题是我实际使用的列表包含数百个索引,例如上面的索引,我不能做出类似的东西:

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

对于每一个,因为这将意味着用与第一个列表的各个索引相对应的数百个列表填充内存,并且从我的观点来看将耗费太多时间和内存消耗。所以我的问题是,如何分离这些索引,然后从中提取单个部分,而不需要创建数百个单独的列表(至少到我不需要数百个单独的行来创建它们)。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

你所拥有的是一个元组列表,像列表一样访问它们

L[3][2]

将从列表L

中的第3个元组中获取第二个元素

答案 2 :(得分: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