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

将列表分成n组的另一种方法[重复]

范翰池
2023-03-14
问题内容

这个问题已经在这里有了答案

迭代访问列表的最“ pythonic”方法是什么? (37个答案)

5年前关闭。

假设我有一个任意长度L的列表:

L = list(range(1000))

将列表分成几组的最佳方法是n什么?这是我能够想到的最佳结构,由于某种原因,它似乎并不是完成任务的最佳方法:

n = 25
for i in range(0, len(L), n):
    chunk = L[i:i+25]

有内置的功能可以做到这一点吗?

编辑:
早期的答案是将我的for循环重新制作为listcomp,这不是这个主意;您基本上是用另一种形式给我我的确切答案。我正在查看是否有替代方法可以完成此任务,例如.split列表上的假设或类似内容。我也在昨晚编写的一些代码中将其用作生成器:

def split_list(L, n):
    assert type(L) is list, "L is not a list"
    for i in range(0, len(L), n):
        yield L[i:i+n]

问题答案:

甲的Python配方(在Python
2.6,使用itertools.izip_longest):

def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return itertools.zip_longest(*args, fillvalue=fillvalue)

用法示例:

>>> list(grouper(3, range(9)))
[(0, 1, 2), (3, 4, 5), (6, 7, 8)]
>>> list(grouper(3, range(10)))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, None, None)]

如果您希望最后一组短于其他组而不是用填充fillvalue,则可以例如更改如下代码:

>>> def mygrouper(n, iterable):
...     args = [iter(iterable)] * n
...     return ([e for e in t if e != None] for t in itertools.zip_longest(*args))
... 
>>> list(mygrouper(3, range(9)))
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
>>> list(mygrouper(3, range(10)))
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]


 类似资料:
  • 问题内容: 我的网页上有一个“瘦”列表:例如,一个包含100个项目的列表,每个项目的长度为一个单词。为了减少滚动,我想在页面的两列甚至四列中显示此列表。我该如何使用CSS? 我希望该解决方案具有灵活性,这样,如果列表增加到200个项目,则无需进行很多手动调整即可容纳新列表。 问题答案: ul { -moz-column-count: 4; -moz-column-gap: 20px; -webki

  • 我非常困惑,因为如何才能从另一个方法获取ArrayList,并将其打印到另一方法?所以我这里的问题是,我的代码是关于学生注册系统的,它有两个方法,即admin和student,所以从admin方法,我们可以添加我们想要的数组,当我们在admin方法中打印出来时,它可以正常工作。但当我试图用学生法打印出来时,似乎没有用。代码如下: 我真的希望有人能理解我的问题,并努力解决它..请:(也谢谢你 以下是

  • 我肯定这是一个愚蠢的问题,但我找不到一个简单的方法将一个列表按另一个列表分组。我在网上搜索了很多,但我只找到了带有类属性或排序元素的示例。 我有一个带有键的字符串列表,例如: 和一个我想按键列表分组的int列表,例如: 因此结果应该是一个包含子列表的列表,如下所示: 或者也可以得到指数。提前道谢。

  • 问题内容: 我有一个ArrayList,我想将其分成n个大小的较小列表,并对每个列表执行一个操作。我目前这样做的方法是 用Java中的ArrayLists实现(任何伪代码都可以) 其中A是列表,n是所需列表的大小 我认为在处理相当大的列表(最大为100万个)时,这种方法会花费太多时间,因此我试图找出哪种方法更有效。 问题答案: 您需要做一些利用List.subList(int,int)视图的事情,

  • 我现在制作了一个arraylist并返回它,就像在一个void中一样。现在我得到了这样的东西,我知道我必须更改静态void t其他东西才能返回它,但我丢失了该版本的代码。 如何使用已填充的列表从一个空到另一个空?问题不在于ArrayList的填充或我在声明ArrayList时犯的任何错误,而在于如何使用返回的列表

  • 我有一个数据框,其中我只需要值​​包含某个值的。我已经实现了。我现在想要的是按用户分组的列表。我得到的是列表中数据框的每个元素。如何获取此列表