笛卡尔积的python实现"/>
汉字首字母组合的笛卡尔积的python实现
接上一篇文章。问题还是昨天的问题,昨天是用vba写的,今天用python再写一遍,进行对比。
用python来实现感觉要清晰、简洁一些。主要的函数是第一个。
def cartesian(lst_set):# 输入的是列表,列表的元素是集合;输出的是音序串。# 如输入[{'Z', 'C'},{'J'}];输出"[{'ZJ','CJ'}]"set_rtn = set() # 接收返回值if len(lst_set) == 2:for a in lst_set[0]:for b in lst_set[1]:set_rtn.add(a+b)return [set_rtn] # 返回一个列表,里面是集合。即[{'字符串', '有可能不只一个元素'}]elif len(lst_set) > 2:# 先计算前两个集合的笛卡儿积lst_set_tmp = cartesian(lst_set[0:2])# 再把前两个的笛积和第3个起的集合进行拼接lst_set_tmp.extend(lst_set[2:])return cartesian(lst_set_tmp)def char_alpha_set(chars):# 通过查字典,把输入的中文字符串,返回成一个列表,列表的元素是集合。# 如输入:张茜,输出[{'Z'},{'X', 'Q'}]# 查字专用。这里仅以以下几个字为例。dic = dict()dic['曾'] = 'C,Z'dic['茜'] = 'Q,X'dic['佳'] = 'J'lst_set = list()for c in chars:lst_set.append(set(dic[c].split(',')))return lst_setdef char_alpha(chars):# 传入中文字符串,输出音序串。如输入"张三",输出"ZS"lst_set = char_alpha_set(chars)alpha = cartesian(lst_set) # alpha 的结构是:[{‘A’, 'B', 'C'}]return ','.join(alpha[0])if __name__ == '__main__':print(char_alpha('曾佳茜'))
更多推荐
汉字首字母组合的笛卡尔积的python实现
发布评论