我想计算list
个String
中的分集。返回的数字应该在0-1
之间,其中1
表示list population
仅由相同的字符串反复填充。
我尝试创建两个函数-一个函数计算所有ascii
的平均String
值,另一个函数计算一个String
相对于所有{其他。
我的字符串的ascii
值(小写字母)在97
和122
之间。这就是为什么我每次使用函数-97
都减去ord(letter)
的原因。我还要除以26
,因为它应该是我们可能的字母数。
编辑:使用下面的代码,我得到负数,并且不确定分集是否正确计算。添加abs()
可以帮助我解决负数问题,但是我不确定这是推荐的/好的解决方案。
import random
def diversity(testword, population):
testword_ascii = 0
testword_letters = list(testword)
for letter in testword_letters:
testword_ascii += ord(letter)
testword_ascii -= 97
return (testword_ascii/len(testword) - average_ascii(population)) / 26
def average_ascii(population):
total_ascii = 0
for i in range(len(population)):
newlist = list(population[i])
for letter in newlist:
total_ascii += ord(letter)
total_ascii -= 97
return total_ascii / len(population) / len(newlist)
population = []
for i in range(100):
created_word = ""
for i in range(5):
letter = chr(97 + int(26 * random.random()))
created_word += letter
population.append(created_word)
for i in range(len(population)):
if diversity(population[i], population) < 0.5:
print ("The diversity of " + population[i] + "is too low! It's: " + str(diversity(population[i], population)))