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

在groupby周围列出会导致空组

微生俊材
2023-03-14
问题内容

我在玩耍以获得更好的itertools感觉groupby,所以我按数字对元组列表进行了分组,并试图得到结果组的列表。groupby但是,当我将结果转换为列表时,会得到一个奇怪的结果:除了最后一组以外的所有内容都是空的。这是为什么?我以为将迭代器转换为列表效率不高,但永远不会改变行为。我猜列表是空的,因为遍历了内部迭代器,但是何时/何地发生?

import itertools

l=list(zip([1,2,2,3,3,3],['a','b','c','d','e','f']))
#[(1, 'a'), (2, 'b'), (2, 'c'), (3, 'd'), (3, 'e'), (3, 'f')]

grouped_l = list(itertools.groupby(l, key=lambda x:x[0]))
#[(1, <itertools._grouper at ...>), (2, <itertools._grouper at ...>), (3, <itertools._grouper at ...>)]

[list(x[1]) for x in grouped_l]
[[], [], [(3, 'f')]]


grouped_i = itertools.groupby(l, key=lambda x:x[0])
#<itertools.groupby at ...>
[list(x[1]) for x in grouped_i]
[[(1, 'a')], [(2, 'b'), (2, 'c')], [(3, 'd'), (3, 'e'), (3, 'f')]]

问题答案:

itertools.groupby()
文档中

返回的组本身就是一个与共享底层可迭代对象的迭代groupby()。因为源是共享的,所以当groupby()对象前进时,先前的组将不再可见。

将输出从groupby()转换为列表将使groupby()对象前进。

因此,您不应该将类型转换itertools.groupby对象列出。如果要将值存储为list,则应执行以下 列表理解操作
以创建groupby对象的副本:

grouped_l = [(a, list(b)) for a, b in itertools.groupby(l, key=lambda x:x[0])]

这将允许您多次迭代列表 (从groupby对象转换)。但是,如果您只对结果进行一次迭代感兴趣,那么您在问题中提到的第二个解决方案就可以满足您的要求。



 类似资料:
  • 问题内容: 我尝试从我的汇编代码中使用,这是一个最小示例,应仅打印到stdout: 我用 当我运行它时,它似乎可以正常工作:该字符串已打印出来,退出状态为: 但是当我尝试捕获文本时,很明显,某些功能无法正常工作: 该变量应具有值,但为空。 我的用法有什么问题? 问题答案: 使用 诸如printf之类的stdio函数后,请使用而不是原始syscall。 正如Michael解释的那样,可以动态链接C库

  • 我正在努力抓住这个问题。我已经尝试了一切,但问题依然存在。基本上,我有一个随机数列表,当我试图比较循环中的值时,它抛出“indexer-ror:list-index-out-range” 我甚至尝试了范围(伦(谁)和伦(谁)。同样的事情。当把0而不是"当前技能"这是int变量它的工作。我不明白的是为什么比较两个值会抛出这个错误。这只是没有意义... 我不是在比较一个值,而是在比较索引本身吗???

  • 这是我第一次问有关StackOverflow的问题。我的问题如下: 我有一个生产者和消费者类。在Producer类中,我逐行读取文件,并将这些文本行放入字符串列表中。当列表的行数为x时。此列表将添加到ArrayBlockingQueue。我有一个在主线程中启动的生产者线程。除此之外,我还启动了几个消费者线程。使用者线程从队列中获取一个项目,该项目应该是一个列表,并遍历该行列表以查找特定单词。找到单

  • 问题内容: 我有一个数据框,并且我试图向其添加一列顺序差异。我发现了一种我非常喜欢的方法(并且对于我的用例而言,它具有很好的概括性)。但是我一路上注意到一件奇怪的事。你能帮我弄清楚吗? 以下是一些具有正确结构的数据: 好,很好。这给了我这样的框架: 我的目标是向此数据框添加一个新列,其中将包含顺序更改。数据需要这样做,但是排序和差异需要“逐行代码”完成,以便另一个代码中的间隔不会导致给定代码的NA

  • 我使用VueJS与webpack, vuex和vue路由器。我试图通过使用子组件中的计算功能来检查用户是否注册。计算的功能试图查看vuex中的用户属性。这工作正常,如果我打开我的Web应用程序通过这个URLhttp://localhost:8080。只有当我通过这个URL直接调用我的子组件时,才会出现问题:http://localhost:8080/meetup/id.它显示了一个错误:的属性“注

  • 问题内容: 我创建了一个html错误页面。它有2行显示错误。第二行链接到主页。为了使两行保持在中心,我创建了一个顶层并将网格的每一行都设为a 。我注意到,如果我用于第二行,则链接周围没有任何空格,但是如果删除,该空格将被添加,即html从变为。 如果删除属性,为什么会添加空格? 码 html CSS 问题答案: 这是因为flexbox删除或元素之间的默认空白。 这是没有flexbox的代码,其中有