获取列表的所有子列表的快速方法

时间:2020-05-03 01:43:52

标签: python optimization combinations

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

  • 我们获得了一个字符串列表["1", "3", "2", ...]
  • 此大小为6的连接列表中,有多少个子列表可被16划分?
  • 请注意,尽管原始列表中的元素可能不是唯一的,但在构造子列表时应将它们视为唯一。例如。对于[1, 1, 1],前两个1和最后两个1的子列表是不同的子列表。

使用itertools.combinations能够足够快地生成我的所有子列表,但是随后遍历所有这些子列表来确定哪些被16划分为“可除数”太慢了。

有没有一种方法可以以与itertools.combations相同或更快的速度创建子列表,并在创建每个子列表时检查每个子列表是否可以被16整除?

任何见识将不胜感激!

1 个答案:

答案 0 :(得分:0)

对列表进行排序。 找到最小的列表(按长度计),其总和至少为16,并且可以将其整除(例如s)。 然后检查所有尺寸列表(从s到6)。 子列表的长度越大,子列表的数量越少,那应该成倍地减少大小的数量