当前位置: 首页 > 面试题库 >

根据Python中的一组索引将列表分成多个部分

赵选
2023-03-14
问题内容

将列表基于任意数量的索引分成多个部分的最佳方法是什么?例如给出下面的代码

indexes = [5, 12, 17]
list = range(20)

返回这样的东西

part1 = list[:5]
part2 = list[5:12]
part3 = list[12:17]
part4 = list[17:]

如果没有索引,则应返回整个列表。


问题答案:

这是我能想到的最简单,最pythonic的解决方案:

def partition(alist, indices):
    return [alist[i:j] for i, j in zip([0]+indices, indices+[None])]

如果输入很大,则迭代器解决方案应该更方便:

from itertools import izip, chain
def partition(alist, indices):
    pairs = izip(chain([0], indices), chain(indices, [None]))
    return (alist[i:j] for i, j in pairs)

当然,这是一个非常懒惰的家伙解决方案(如果您不介意获取数组而不是列表,但是无论如何,您始终可以将它们还原为列表):

import numpy
partition = numpy.split


 类似资料:
  • 问题内容: 我需要所有包含“ aa”的项目的索引位置。我在将enumerate()与部分字符串匹配结合在一起时遇到麻烦。我什至不确定我是否应该使用枚举。 我只需要返回索引位置:0、2、5 问题答案:

  • 最初,我认为将一个多索引对象传递给。loc可以提取出我想要的值/级别,但这是行不通的。做这样的事情最好的方法是什么?

  • 问题内容: 返回以下内容的最紧凑的方法是什么: 给定一个元组列表,返回一个由元组的第一个(或第二个,无关紧要)元素组成的列表。 对于: 返回的列表将是 问题答案: 如果需要同时使用zip

  • 问题内容: 我有一列如下所示的熊猫: 我需要将列表的此列分为2列,并使用。 问题答案: 您可以使用与构造函数通过转换为创建通过使用: 对于新的DataFrame: 解决方案apply(pd.Series)非常慢:

  • 问题内容: 我有一个奇怪的情况。 我有一个2D Numpy数组,x: 我有2个索引器-一个索引为行,一个索引为列。为了索引X,我必须执行以下操作: 不仅仅是: (失败:错误,无法通过(2,)广播(20,)) 我希望能够使用广播在一行中建立索引,因为这样可以使代码保持干净和可读性…而且,我对幕后的python并不太了解,但是据我了解它,它在一行中应该更快(我将使用相当大的数组)。 测试用例: 问题答