Python 集合子集生成 - 打印5的倍数子集
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)
代码解释:
-
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:返回所有符合条件的子集。
-
主程序:
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]
本代码使用了位运算来高效地生成所有子集,并根据子集编号筛选出满足条件的子集。代码易于理解和修改,可用于各种集合子集生成问题。
原文地址: https://www.cveoy.top/t/topic/fDmz 著作权归作者所有。请勿转载和采集!