3

我的问题似乎很简单,但是对于像我这样的 python 新手来说,这开始变得太复杂了,我无法理解,所以情况如下:

我需要列出一个清单,例如:

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

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

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

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

4

3 回答 3

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
于 2013-06-21T15:22:48.303 回答
2

你有一个元组列表,像列表列表一样访问它们

L[3][2]

将从列表 L 中的第三个元组中获取第二个元素

于 2013-06-21T15:20:53.910 回答
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
于 2013-06-21T15:22:22.813 回答