Python 练习2
生成一个有N个元素的有随机整数n组成的列表,其中N和年的取值范围是(1<N<=5)
和(0<=n<100),显示这个列表的所有子集。
N个数字空有2en个子集,对于这N个数字在每个子集中来讲要么存在要么不存在,可以采用子集映射为2进制的算法。
例如[a,b]集合的子集:
空 ---- 00
a ---- 10
b ---- 01
ab ---- 11
因此问题简化为列出所有小于2en的数字的2进制形式,将其对应即可
#!/usr/bin/python
import random
def bin(x):
x=int(x)
if x==0:
return str(0)
else:
result=''
while x>0:
mod=x%2
x=x/2
result=str(mod)+result
return result
def getAllSubset(aList):
allSubset=[]
aListLen=len(aList)
combination=pow(2,aListLen)
for i in range(combination):
str2=bin(i)
differ=aListLen-len(str2)
str2=''.join(['0' for i in range(differ)])+str2
subset=[]
for j in range(aListLen):
if int(str2[j])==1:
subset.append(aList[int(j)])
allSubset.append(subset)
return allSubset
if __name__ == "__main__":
num=random.randint(2,5)
aList=[random.randint(0,100) for i in range(num)]
allSubset=getAllSubset(aList)
print allSubset
相关文档:
最近在学习py,实践是:校验指定文件是否打上数字签名~python的标准库中没有提供这类函数,同时在网上搜了一下也没有找到第三方的包有提供,最后找到了可以使用Crypt32.dll的导出函数CryptQueryObject()。
首先我希望pywin32的包中最好已封装这样的api,结果发现没有-_-!。于是不得不自己动手~py中调用dll的导出函数方法比 ......
当要使函数接收元组或字典形式的参数的时候,有一种特殊的方法,它分别使用*和**前缀。这种方法在函数需要获取可变数量的参数的时候特别有用。
>>> def powersum(power, *args):
... '''Return the sum of each argument raised to specified power.'''
... ......
在 python的lib目录里有一个:this.py,它其实是隐藏着一首诗,源码如下:
s =
"""Gur Mra bs Clguba, ol Gvz Crgref
Ornhgvshy vf orggre guna htyl.
Rkcyvpvg vf orggre guna vzcyvpvg.
Fvzcyr vf orggre guna pbzcyrk.
Pbzcyrk vf ......
原文
http://www.hetland.org/python/instant-hacking.php
Instant Hacking[译
文]
译者: 肯定来过   ......