【问题标题】:Python list index splitting and manipulationPython列表索引拆分和操作
【发布时间】:2013-06-21 15:17:42
【问题描述】:

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

我需要一个清单,例如:

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

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

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

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

【问题讨论】:

  • 您无需为此做任何事情。您只需添加另一个索引,它就会起作用。 L[0][0] 将给出 a,L[0][1] 将给出 b,L[2][1] 将给出等

标签: python arrays list


【解决方案1】:

我可能误读了你的问题,但我倾向于说你实际上不需要做任何事情来索引你的元组。请参阅我的评论,但是: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

【讨论】:

  • 这是一个好的开始,因为我不知道这可以在 python 中完成,所以我感谢您提供的知识,但是我仍然想知道如何有效地调用(例如) L[:][0],这对于从该列表中的所有索引中提取 a* 有用吗? *(a只是一个例子,假设它是括号中的第一个索引)
  • 非常感谢,通过更新的回复彻底解决了问题!嗯..主要是哈哈,我可以为横切分配几个“条目”,例如 [entry[0, 1, 2] for entry in L] 吗?
  • 感谢您的编辑,很抱歉我没有说得更清楚,但我正在尝试访问更接近此的内容:[entry[0, 8, 13] for entry in L] 表示切片不会从 1 到 3,但实际上需要是单独的索引,感谢您提供的任何帮助,并且已经给予。
【解决方案2】:

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

L[3][2]

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

【讨论】:

    【解决方案3】:

    内部列表的两种使用方式:

    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
    

    【讨论】:

      猜你喜欢
      • 2016-09-01
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 2019-01-17
      • 2021-08-23
      相关资源
      最近更新 更多