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

根据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)非常慢:

  • 问题内容: 我有一个关于将数据框列中的列表分成多行的问题。 假设我有这个数据框: 我想要数字的每个单一组合,因此最终结果将是: 因为现在我得到以下结果: 为了得到上面的结果,我做了: 问题答案: 与斯科特·波士顿(Scott Boston)的建议类似,我建议您分别展开各列,然后将它们合并在一起。 例如,对于“职位”: 并且,一起: