python 判断字符串中判断是否含有字符串英文

python判断字符串是否是回文结构 - 实验交流 - 生物秀
标题: python判断字符串是否是回文结构
摘要: [python判断字符串是否是回文结构]Dec 11, 2010回文(Palindrome),就是一个序列(如字符串)正着读反着读是一样的。生物信息(bioinformation)学上最常见的就是转录因子在DNA上的结合位点通常都是回文结构。个么如何判断一个字符串是回文结构呢?在MIT Introduction to CS and Programming Lec 4 (39:38) 里,介绍了递归的方法:def isPalindrome(s):if len…… [本文关键词:回文结构 复杂度 生物信息 转录因子]……
Dec 11, 2010
回文(Palindrome),就是一个序列(如字符串)正着读反着读是一样的。信息(bioinformation)学上最常见的就是转录因子在上的结合位点通常都是回文结构。
个么如何判断一个字符串是回文结构呢?在MIT Introduction to CS and Programming Lec 4 (39:38) 里,介绍了递归的方法:
def isPalindrome(s):
if len(s) = 1:
return True
return s[0] == s[-1] and isPalindrome(s[1:-1])
其实完全可以用循环实现,复杂度是一样的:
def isPalindrome1(s):
for i in range(len(s))/2:
if not s[i] == s[len(s)-i-1]:
return False
return True
不过其实我们都被忽悠啦,在Python里可以很容易的从回文的定义来判断,就是字符串的倒序和字符串本身是一样的话,就是回文。
def isPalindrome2(s):
return s == s[::-1]
以上的实现复杂度也是O(n)的,不过是python内部用C语言实现的,猜测会比前2个方法快。
总之这又是一个递归的失败的例子,斐波那契数列是另一个,递归的方法比循环的方法要慢很多。唯一我知道的递归是最适用的方法的就是汉诺塔了。跑题了,不多说了。。
相关热词:
生物秀是目前国内最具影响力的生物医药门户网站之一,致力于IT技术和BT的跨界融合以及生物医药领域前沿技术和成功商业模式的传播。为生物医药领域研究人员和企业提供最具价值的行业资讯、专业技术、学术交流平台、会议会展、电子商务和求职招聘等一站式服务。
官方微信号:shengwuxiu
电话:021-噢哦,这个页面找不到了
下载作业帮可以找到更多答案python判断字符串是否包含另一字符串的方法
方法一:contains = 'abcde'.find('bcd') &= 0方法二:contains = 'abcde'.count('bcd') & 0转自:
评论:0 | 查看次数:6980
总访问量: 656263
文章总数: 236 篇
评论总数: 361 个
今日访问量: 42随笔 - 1795&
文章 - 0&评论 - 113&trackbacks - 0
下面这个小工具包含了判断unicode是否是汉字、数字、英文或者其他字符,全角符号转半角符号,unicode字符串归一化等工作。
#!/usr/bin/env python
# -*- coding:GBK -*-&
"""汉字处理的工具:
判断unicode是否是汉字,数字,英文,或者其他字符。
全角符号转半角符号。"""
__author__="internetsweeper &&"
__date__=""
def is_chinese(uchar):
& & & & """判断一个unicode是否是汉字"""
& & & & if uchar &= u'\u4e00' and uchar&=u'\u9fa5':
& & & & & & & & return True
& & & & else:
& & & & & & & & return False
def is_number(uchar):
& & & & """判断一个unicode是否是数字"""
& & & & if uchar &= u'\u0030' and uchar&=u'\u0039':
& & & & & & & & return True
& & & & else:
& & & & & & & & return False
def is_alphabet(uchar):
& & & & """判断一个unicode是否是英文字母"""
& & & & if (uchar &= u'\u0041' and uchar&=u'\u005a') or (uchar &= u'\u0061' and uchar&=u'\u007a'):
& & & & & & & & return True
& & & & else:
& & & & & & & & return False
def is_other(uchar):
& & & & """判断是否非汉字,数字和英文字符"""
& & & & if not (is_chinese(uchar) or is_number(uchar) or is_alphabet(uchar)):
& & & & & & & & return True
& & & & else:
& & & & & & & & return False
def B2Q(uchar):
& & & & """半角转全角"""
& & & & inside_code=ord(uchar)
& & & & if inside_code&0x0020 or inside_code&0x7e: & & &#不是半角字符就返回原来的字符
& & & & & & & & return uchar
& & & & if inside_code==0x0020: #除了空格其他的全角半角的公式为:半角=全角-0xfee0
& & & & & & & & inside_code=0x3000
& & & & else:
& & & & & & & & inside_code+=0xfee0
& & & & return unichr(inside_code)
def Q2B(uchar):
& & & & """全角转半角"""
& & & & inside_code=ord(uchar)
& & & & if inside_code==0x3000:
& & & & & & & & inside_code=0x0020
& & & & else:
& & & & & & & & inside_code-=0xfee0
& & & & if inside_code&0x0020 or inside_code&0x7e: & & &#转完之后不是半角字符返回原来的字符
& & & & & & & & return uchar
& & & & return unichr(inside_code)
def stringQ2B(ustring):
& & & & """把字符串全角转半角"""
& & & & return "".join([Q2B(uchar) for uchar in ustring])
def uniform(ustring):
& & & & """格式化字符串,完成全角转半角,大写转小写的工作"""
& & & & return stringQ2B(ustring).lower()
def string2List(ustring):
& & & & """将ustring按照中文,字母,数字分开"""
& & & & retList=[]
& & & & utmp=[]
& & & & for uchar in ustring:
& & & & & & & & if is_other(uchar):
& & & & & & & & & & & & if len(utmp)==0:
& & & & & & & & & & & & & & & & continue
& & & & & & & & & & & & else:
& & & & & & & & & & & & & & & & retList.append("".join(utmp))
& & & & & & & & & & & & & & & & utmp=[]
& & & & & & & & else:
& & & & & & & & & & & & utmp.append(uchar)
& & & & if len(utmp)!=0:
& & & & & & & & retList.append("".join(utmp))
& & & & return retList
if __name__=="__main__":
& & & & #test Q2B and B2Q
& & & & for i in range(0xF):
& & & & & & & & print Q2B(B2Q(unichr(i))),B2Q(unichr(i))
& & & & #test uniform
& & & & ustring=u'中国 人名a高频A'
& & & & ustring=uniform(ustring)
& & & & ret=string2List(ustring)
& & & & print ret
这个问题是做&时搞定的,就是把一个混合了中英文混合字串分离为英文与中文的子字串,譬如,将&&我的&English&学的不好&&分离为&&我的"、"&English&&&与&"学的不好"&三个子字串。
1.&中英文混合字串的统一编码表示中英文混合字串处理最省力的办法就是把它们的编码都转成&Unicode,让一个汉字与一个英文字母的内存位宽都是相等的。这个工作用&Python&来做,比较合适,因为&Python&内码采用的是&Unicode,并且为了支持&Unicode&字串的操作,Python&做了一个&Unicode&内建模块,把&string&对象的全部方法重新实现了一遍,另外提供了&Codecs&对象,解决各种编码类型的字符串解码与编码问题。譬如下面的&Python&代码,可实现&UTF-8&编码的中英文混合字串向&Unicode&编码的转换:#&-*-
&coding:utf-8&-*-a&=&"我的&English&学的不好"print&type(a),len&(a),&ab&=&unicode&(a,&"utf-8")print&type(b),&len&(b),&b字符串&a&是&utf-8&编码,使用&python&的内建对象&unicode&可将其转换为&Unicode&编码的字符串&b。上述代码执行后的输出结果如下所示,比较字串&a&与字串&b&的长度,显然&len&(b)&的输出结果是合理的。&type&'str'&&27&我的&English&学的不好&type&'unicode'&&15&我的&English&学的不好要注意的一个问题是&Unicode&虽然号称是&统一码&,不过也是存在着两种形式,即:UCS-2:为&16&位码,具有&2^16&=&65536&个码位;&UCS-4:为&32&位码,目前的规定是其首字节的首位为&0,因此具有&2^31&=&&个码位,不过现在的只使用了&0x&-&0x0010FFFF&之间的码位,共&1114112&个。&使用Python&&sys&模块提供的一个变量&maxunicode&的值可以判断当前&Python&所使用的&Unicode&类型是&UCS-2&的还是&UCS-4&的。import&sysprint&sys.maxunicode若&sys.maxunicode&的值为&1114111,即为&UCS-4;若为&65535,则为&UCS-2。
2.&中英文混合字串的分离一旦中英文字串的编码获得统一,那么对它们进行分裂就是很简单的事情了。首先要为中文字串与英文字串分别准备一个收集器,使用两个空的字串对象即可,譬如&zh_gather&与&en_gather;然后要准备一个列表对象,负责按分离次序存储&zh_gather&与&en_gather&的值。下面这个&Python&函数接受一个中英文混合的&Unicode&字串,并返回存储中英文子字串的列表。def&split_zh_en&(zh_en_str):&&&&&&&&zh_en_group&=&[]&&&&&&&&zh_gather&=&""&&&&&&&&en_gather&=&""&&&&&&&&zh_status&=&False&&&&&&&&for&c&in&zh_en_str:&&&&&&&&&&&&&&&&if&not&zh_status&and&is_zh&(c):&&&&&&&&&&&&&&&&&&&&&&&&zh_status&=&True&&&&&&&&&&&&&&&&&&&&&&&&if&en_gather&!=&"":&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&zh_en_group.append&([mark["en"],en_gather])&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&en_gather&=&""&&&&&&&&&&&&&&&&elif&not&is_zh&(c)&and&zh_status:&&&&&&&&&&&&&&&&&&&&&&&&zh_status&=&False&&&&&&&&&&&&&&&&&&&&&&&&if&zh_gather&!=&"":&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&zh_en_group.append&([mark["zh"],&zh_gather])&&&&&&&&&&&&&&&&if&zh_status:&&&&&&&&&&&&&&&&&&&&&&&&zh_gather&+=&c&&&&&&&&&&&&&&&&else:&&&&&&&&&&&&&&&&&&&&&&&&en_gather&+=&c&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&zh_gather&=&""&&&&&&&&if&en_gather&!=&"":&&&&&&&&&&&&&&&&zh_en_group.append&([mark["en"],en_gather])&&&&&&&&elif&zh_gather&!=&"":&&&&&&&&&&&&&&&&zh_en_group.append&([mark["zh"],zh_gather])&&&&&&&&return&zh_en_group上述代码所实现的功能细节是:对中英文混合字串&zh_en_str&的遍历过程中进行逐字识别,若当前字符为中文,则将其添加到&zh_gather&中;若当前字符为英文,则将其添加到&en_gather&中。zh_status&表示中英文字符的切换状态,当&zh_status&的值发生突变时,就将所收集的中文子字串或英文子字串添加到&zh_en_group&中去。判断字串&zh_en_str&中是否包含中文字符的条件语句中出现了一个&is_zh&()&函数,它的实现如下:def&is_zh&(c):&&&&&&&&x&=&ord&(c)&&&&&&&&#&Punct&&&Radicals&&&&&&&&if&x&&=&0x2e80&and&x&&=&0x33ff:&&&&&&&&&&&&&&&&return&True&&&&&&&&#&Fullwidth&Latin&Characters&&&&&&&&elif&x&&=&0xff00&and&x&&=&0xffef:&&&&&&&&&&&&&&&&return&True&&&&&&&&#&CJK&Unified&Ideographs&&&&&&&&&&#&CJK&Unified&Ideographs&Extension&A&&&&&&&&elif&x&&=&0x4e00&and&x&&=&0x9fbb:&&&&&&&&&&&&&&&&return&True&&&&&&&&#&CJK&Compatibility&Ideographs&&&&&&&&elif&x&&=&0xf900&and&x&&=&0xfad9:&&&&&&&&&&&&&&&&return&True&&&&&&&&#&CJK&Unified&Ideographs&Extension&B&&&&&&&&elif&x&&=&0x20000&and&x&&=&0x2a6d6:&&&&&&&&&&&&&&&&return&True&&&&&&&&#&CJK&Compatibility&Supplement&&&&&&&&elif&x&&=&0x2f800&and&x&&=&0x2fa1d:&&&&&&&&&&&&&&&&return&True&&&&&&&&else:&&&&&&&&&&&&&&&&return&False这段代码来自&jjgod&写的&XeTeX&预处理程序。对于分离出来的中文子字串与英文子字串,为了使用方便,在将它们存入&zh_en_group&列表时,我对它们分别做了标记,即&mark["zh"]&与&mark["en"]。mark&是一个&dict&对象,其定义如下:mark&=&{"en":1,&"zh":2}如果要对&zh_en_group&中的英文字串或中文字串进行处理时,标记的意义在于快速判定字串是中文的,还是英文的,譬如:for&str&in&zh_en_group:&&&&&&&&if&str[0]&=&mark["en"]:&&&&&&&&&&&&&&&&do&somthing&&&&&&&&else:&&&&&&&&&&&&&&&&do&somthing&
阅读(...) 评论()

我要回帖

更多关于 js判断是否含有字符串 的文章

 

随机推荐