【问题标题】:Fast way of getting all sublists of a list获取列表的所有子列表的快速方法
【发布时间】:2020-05-03 01:43:52
【问题描述】:

我最近轰炸了一次编码面试,因为我无法足够快地生成列表的所有可能子列表。更具体地说:(使用python)

  • 我们得到了一个字符串数字列表["1", "3", "2", ...]
  • 这个大小为 6 的列表中有多少个子列表可以被 16 整除?
  • 请注意,虽然原始列表中的元素可能不是唯一的,但在构建子列表时应该将它们视为唯一的。例如。对于[1, 1, 1],前两个 1 的子列表和后两个 1 是不同的子列表。

使用itertools.combinations 我能够以足够快的速度生成所有子列表,但是循环遍历所有这些子列表以确定哪些子列表可以被 16“整除”太慢了。

那么有没有办法以与itertools.combations 相同的速度(或更快)创建子列表,在创建每个子列表时检查它们是否可被 16 整除?

任何见解将不胜感激!

【问题讨论】:

  • 字符串列表“可被 16 整除”是什么意思?您是指 int 值的总和吗?
  • 不清楚您所说的“大小为 6 的列表可被 16 整除”是什么意思。您是指列表中值的总和吗?
  • 子列表大小是指子列表元素的总和吗?
  • 大家好。对不起,我应该更清楚。我的意思是串联可以被 16 整除

标签: python optimization combinations


【解决方案1】:

对列表进行排序。 找到总和至少为 16 且可被它整除的最小列表(按长度)(比如 s)。 然后检查从 s 到 6 的所有尺寸列表。 这应该会以指数方式减少大小的数量,因为子列表的长度越大,子列表的数量就越少

【讨论】:

  • 此外,如果 s 为 3,则仅检查大小为 3 和 6 的子列表。如果 s 为 4 或 5 或 6,则仅检查 s。如果 s 是 2,只检查 2 和 4 和 6。你明白了吗?
猜你喜欢
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
  • 2012-06-15
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多