Python 集合子集生成 - 打印5的倍数子集

本代码使用 Python 生成集合的所有非空子集,并仅打印编号为 5 倍数的子集。

代码示例:

def power_set(nums):
    n = len(nums)
    res = []
    for i in range(1, 2**n):
        subset = []
        for j in range(n):
            if i & (1 << j):
                subset.append(nums[j])
        if len(subset) > 0 and len(subset) % 5 == 0:
            res.append(subset)
    return res

nums = input().strip().split(',')
nums = [int(x) for x in nums]
subsets = power_set(nums)
for subset in subsets:
    print(subset)

代码解释:

  1. power_set(nums) 函数:

    • n = len(nums):获取集合 nums 的长度。
    • res = []:创建一个空列表用于存储结果子集。
    • for i in range(1, 2**n):循环遍历所有可能的子集编号。2**n 表示所有可能的子集数量,从 1 开始是因为 0 表示空集,我们只需要非空子集。
    • subset = []:创建一个空列表用于存储当前子集。
    • for j in range(n):循环遍历集合 nums 中的每个元素。
    • if i & (1 << j):使用位运算判断当前子集编号 i 的第 j 位是否为 1,如果是则表示当前子集包含 nums[j]
    • subset.append(nums[j]):如果当前子集编号包含 nums[j],则将其添加到 subset 列表中。
    • if len(subset) > 0 and len(subset) % 5 == 0:判断当前子集是否非空且长度为 5 的倍数,如果是则将其添加到 res 列表中。
    • return res:返回所有符合条件的子集。
  2. 主程序:

    • nums = input().strip().split(','):获取用户输入的集合,使用 split(',') 将其分割成字符串列表。
    • nums = [int(x) for x in nums]:将字符串列表转换为整数列表。
    • subsets = power_set(nums):调用 power_set() 函数生成所有符合条件的子集。
    • for subset in subsets:循环遍历所有符合条件的子集,并将其打印。

示例:

输入:

5, -2, 4, 2

输出:

[-2, 2]
[5, 4]
[5, -2, 4, 2]

本代码使用了位运算来高效地生成所有子集,并根据子集编号筛选出满足条件的子集。代码易于理解和修改,可用于各种集合子集生成问题。

Python 集合子集生成 - 打印5的倍数子集

原文地址: https://www.cveoy.top/t/topic/fDmz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录