1,in和not in
- yuan@ThinkPad-SL510:~$ ipython -nobanner
- In [1]: uname = "Linux #50-Ubuntu SMP Fri Mar 18 19:00:26 UTC 2011"
- In [2]: 'Linux' in uname
- Out[2]: True
- In [3]: 'Darwin' in uname
- Out[3]: False
- In [4]: 'Darwin' not in uname
- Out[4]: True
- In [5]: uname.index('Linux')
- Out[5]: 0
- In [6]: uname.find('Linux')
- Out[6]: 0
- In [7]: uname.index('Darwin')
- ---------------------------------------------------------------------------
- ValueError Traceback (most recent call last)
- /home/yuan/<ipython console> in <module>()
- ValueError: substring not found
- #错误很明显呢,小看读者的智商了,有没有?呵呵
- In [8]: uname.find('Darwin')
- Out[8]: -1
- #如果find成功返回第一个字符的index,如果find失败则返回 -1
- In [9]: smp_index = uname.index('SMP')
- In [10]: smp_index
- Out[10]: 17
- In [11]: uname[smp_index:]
- Out[11]: 'SMP Fri Mar 18 19:00:26 UTC 2011'
- In [12]: uname[:smp_index]
- Out[12]: 'Linux #50-Ubuntu '
- #很熟悉吧?切片操作
- #语法:string[index:]
- In [13]: uname
- Out[13]: 'Linux #50-Ubuntu SMP Fri Mar 18 19:00:26 UTC 2011'
- yuan@ThinkPad-SL510:~$ ipython -nobanner
- In [1]: some_string = "Gao-yuan is good"
- In [2]: some_string.startswith("Gao")
- Out[2]: True
- In [3]: some_string.startswith("gao")
- Out[3]: False
- In [4]: some_string.endswith("good")
- Out[4]: True
- In [5]: some_string.endswith("gooD")
- Out[5]: False
- In [6]: some_string[:len("Gao")] == "Gao"
- Out[6]: True
- In [7]: some_string[-len("good"):] == "good"
- Out[7]: True
- #切片操作可以创建并返回一个新的字符串对象,而不是在行内对字符串进行修改。
- #脚本中切分一个字符串的频率,会对内存的性能有明显的影响。
- #即使没有明显的性能影响,在使用startwith()和endswith()
- #可以满足需要的情况下,应避免使用切片操作
- yuan@ThinkPad-SL510:~$ ipython -nobanner
- In [1]: xml_tag = "<some_tag>"
- In [2]: xml_tag.lstrip("<")
- Out[2]: 'some_tag>'
- In [3]: xml_tag.lstrip(">")
- Out[3]: '<some_tag>'
- In [4]: xml_tag.rstrip(">")
- Out[4]: '<some_tag'
- In [5]: xml_tag.rstrip("<")
- Out[5]: '<some_tag>'
- In [6]: xml_tag.strip("<").strip(">")
- Out[6]: 'some_tag'
- #因为strip等方法可以返回一个字符串,就可以在strip()调用之后直接调用另一个字符串操作。
很明显strip方法会创建一个新字符串,这个和随后的replace方法一样,,而不是对原字符串进行行内修改。