python – N选择列表的N2个子列表

python – N选择列表的N2个子列表,第1张

概述在 Python中是否有一种有效的方法可以将大小为n的列表的所有分区分成两个大小为n / 2的子集?我想得到一些迭代构造,使得每次迭代提供原始列表的两个非重叠子集,每个子​​集具有大小n / 2. 例如: A = [1,2,3,4,5,6] # here n = 6# some iterative construct # in each iteration, a pair of s 在 Python中是否有一种有效的方法可以将大小为n的列表的所有分区分成两个大小为n / 2的子集?我想得到一些迭代构造,使得每次迭代提供原始列表的两个非重叠子集,每个子​​集具有大小n / 2.

例如:

A = [1,2,3,4,5,6]    # here n = 6# some iterative construct    # in each iteration,a pair of subsets of size n/2    # subsets = [[1,4],[2,6]] for example for one of the iterations    # subsets = [[1,5],[3,6]] a different iteration example

子集应该是非重叠的,例如,[[1,3],[4,6]]有效,但[[1,5]]不是.两个子集的顺序无关紧要,6]]不算与[[4,6],[1,3]]不同,因此这两个中只有一个应出现在迭代.每个子集内的顺序也无关紧要,6]],2],[[3]所有计数都相同,所以只有其中一个应该在整个迭代中出现.

解决方法 这是一个基于itertools的生成器,我认为它可以产生你想要的值.

def sub_Lists(sequence):    all_but_first = set(sequence[1:])    for item in itertools.combinations(sequence[1:],len(sequence)//2 - 1):        yIEld [[sequence[0]] + List(item),List(all_but_first.difference(item))]

与Suever的答案中的基于排列的方法相比,我以两种方式避免了几乎重复的输出.首先,我避免同时产生[[“a”,“b”],[“c”,“d”]]和[[“c”,“d”],[“a”,“b”]]强制所有结果在第一个子列表中具有输入序列的第一个值.我通过构建第二个避免产生[[“a”,“d”]和[[“a”,[“d”,“c”]]使用set-subtraction的子列表.

请注意,产生嵌套元组可能比嵌套列表更自然.要做到这一点,只需将最后一行更改为:

yIEld (sequence[0],) + item,tuple(all_but_first.difference(item))
总结

以上是内存溢出为你收集整理的python – N选择列表的N / 2个子列表全部内容,希望文章能够帮你解决python – N选择列表的N / 2个子列表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1194252.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存