例如:
a = ['asa', 'rtfd', 'ew', 'cai', 'h', 'wu', 'tind', 'istar', 'bj', 'wang', 'suny', 'tr', 'tr']
求只有1个字母时,各个元素出现的概率,因为列表中1个字母的只有h,所以h在一个字母中的概率为1
求2个字母时,有ew,wu,bj,tr,tr,所以ew概率为1/5,wu概率为1/5,bj概率为1/5,tr概率为2/5
以此类推,求完列表中所有字母在同长度中的概率。
求如何用python代码实现以上要求!
# 长度列表
len_lst = set(len(i) for i in a)
for i in len_lst:
b = [j for j in a if len(j) == i]
res = {k: b.count(k)/len(b) for k in set(b)}
print(res)
我的代码虽然比第一个人的长,但绝对简单易懂,亲测有效
输出如下:
h 字符串出现概率为1.0
ew 字符串出现概率为0.2
wu 字符串出现概率为0.2
bj 字符串出现概率为0.2
tr 字符串出现概率为0.4
asa 字符串出现概率为0.5
cai 字符串出现概率为0.5
rtfd 字符串出现概率为0.25
tind 字符串出现概率为0.25
wang 字符串出现概率为0.25
suny 字符串出现概率为0.25
istar 字符串出现概率为1.0
[Finished in 115ms]
a = ['asa', 'rtfd', 'ew', 'cai', 'h', 'wu', 'tind', 'istar', 'bj', 'wang', 'suny', 'tr', 'tr']
#先将个数不同的字符串分类归为一个列表
one=[]
two=[]
three=[]
four=[]
five=[]
for i in a:
if len(i)==1:
one.append(i)
elif len(i)==2:
two.append(i)
elif len(i)==3:
three.append(i)
elif len(i)==4:
four.append(i)
elif len(i)==5:
five.append(i)
#求概率函数
def res(string,*args):
x=0
args=args[0]
for i in args:
if string==i:
x+=1
print(string,end=' ')
print("字符串出现概率为%s"%(x/len(args)))
def deal(list):
for string in list:
res(string,list)
deal(one)
deal(two)
deal(three)
deal(four)
deal(five)