对于给定的正整数n(n≥1),求1~n构成的集合的幂集ps。 给出求幂集运算的 3 种python程序设计 以及 相应的演示结果。
时间: 2024-09-14 22:14:28 浏览: 57
对于正整数 \( n \) 的幂集 \( P(S) \),它是指集合 \( S = {1, 2, ..., n} \) 所有可能的所有子集,包括空集和集合本身。在Python中,我们可以使用列表推导式、生成器表达式和内置函数`itertools`来计算幂集。
**方法一:列表推导式**
```python
def power_set(numbers):
return [subset for size in range(len(numbers)+1) for subset in itertools.combinations(numbers, size)]
# 演示结果
n = 3
powerset = power_set(range(1, n+1))
print(powerset)
```
运行结果会输出所有 1 到 n 的子集,例如:`[(), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]`
**方法二:生成器表达式**
```python
import itertools
def power_set_generator(numbers):
return (subset for size in range(len(numbers)+1) for subset in itertools.combinations(numbers, size))
# 使用生成器
n = 3
powerset_gen = power_set_generator(range(1, n+1))
print(list(powerset_gen)) # 输出与列表推导式相同的结果
```
这种方法不会一次性创建完整的列表,而是按需生成每个子集。
**方法三:`itertools` 函数 `product` 和 `chain.from_iterable`**
```python
import itertools
def power_set_with_chain(numbers):
powerset = list(itertools.chain.from_iterable(itertools.product([False, True], repeat=len(numbers))))
powerset = [''.join(map(str, x)) for x in powerset]
return [int(''.join(map(str, i)), 2) for i in powerset]
# 演示结果(这里使用 binary 表示子集)
n = 3
powerset_binary = power_set_with_chain(range(1, n+1))
powerset_decimal = [i for i in powerset_binary if i <= n] # 转换回数字表示法
print(powerset_decimal)
```
这个方法通过生成所有二进制序列然后转换为十进制来得到幂集。
阅读全文