Python二进制文件与列表值比较

Python二进制文件与列表值比较,python,binary,set,bit,Python,Binary,Set,Bit,我正试图找出如何在Python中实现这一点: 打印出任何给定集合的所有子集 例如:[1,2] 00 : [] 01 : [2] 10 : [1] 11 : [1,2] 因此,答案如下: [] [2] [1] [1,2] 我意识到解决方案的总数是2(exp)n,其中n是列表中的元素数 例如,如果列表是[1,3,4],那么子集的总数将是2(exp)3=8 我还意识到,如果我得到上面列表的二进制位表示,则会出现以下情况: 例如:[1,2] 00 : [] 01 : [2] 10 : [1] 11

我正试图找出如何在Python中实现这一点:

打印出任何给定集合的所有子集

例如:
[1,2]

00 : []
01 : [2]
10 : [1]
11 : [1,2]
因此,答案如下:

[]
[2]
[1]
[1,2]
我意识到解决方案的总数是
2(exp)n
,其中
n
是列表中的元素数

例如,如果列表是
[1,3,4]
,那么子集的总数将是
2(exp)3=8

我还意识到,如果我得到上面列表的二进制位表示,则会出现以下情况:

例如:
[1,2]

00 : []
01 : [2]
10 : [1]
11 : [1,2]
包含
1
的位的每个位置,即将子集索引到原始集
[1,2]
时子集的位置。eg binary 01=在原始集合的位置1处获取索引
[1,2]
,这将是
[2]

二进制11表示从原始集合
[1,2]
中获取索引位置0和1,该集合给出了
[1,2]
等的答案


如何编写代码,我的代码太乱了,有没有简单的方法来映射它?

您可以使用一个循环来迭代所有二进制组合,并使用一个嵌套循环来测试计数器的每一位,以决定是否将对应索引的列表元素添加到输出列表中:

def combinations(l):
    for i in range(1 << len(l)):
        c = []
        for b in range(len(l)):
            if i & (1 << (len(l) - b - 1)):
                c.append(l[b])
        yield c
将返回:

[[], [2], [1], [1, 2]]
[[], [4], [3], [3, 4], [1], [1, 4], [1, 3], [1, 3, 4]]
以及:

将返回:

[[], [2], [1], [1, 2]]
[[], [4], [3], [3, 4], [1], [1, 4], [1, 3], [1, 3, 4]]

欢迎来到堆栈溢出!请参加本次参观并阅读帮助中心,特别是如何提问。你在这里的最佳选择是做你的研究,搜索相关的话题,然后尝试一下。在做了更多的研究和搜索之后,发布一个最小的、完整的、可验证的你尝试的例子,并具体说明你在哪里被卡住了,这可以帮助你得到更好的答案!也许这会有所帮助:看看:
def powerset(iterable):
-它将所有集合创建为元组。也许你可以从这里开始工作谢谢你的回答,你能解释一下这句话的确切含义吗你是在谈论列表理解吗?这只是一种更简洁地编写我的第一个代码示例的方法。你可以阅读更多关于它的内容。哦,不,我确实理解列表理解,我只是不明白为什么你要用len(l)-b-1对0..4(l中的2个元素)中的所有二进制数进行&'