先学了R,最近刚刚上手python,所以想着将python和R结合起来互相对比来更好理解python。最好就是一句python,对应写一句R。
pandas可谓如雷贯耳,数据处理神器。
以下符号:
=R=
代表着在R中代码是怎么样的。
————————————————————————————————————————————
字符编码
encode 和 decode
Python2 默认的编码是 ascii,通过 encode 可以将对象的编码转换为指定编码格式(称作“编码”),而 decode 是这个过程的逆过程(称作“解码”)。
decode,将字节串转变为字符串,并且这个字符串是按照
unicode 编码的。在 unicode 编码中,一个汉字对应一个字符,这时候度量它的长度就是 1.
encode,一个 unicode 编码的字符串,也可以转换为字节串。
>>> a = "中" >>> a '\xe4\xb8\xad' >>> b = a.decode() >>> b u'\u4e2d'
其中,a就是ASCII格式的编码,字节串;b就是unicode编码的字符串。当然有一个问题就是最后出来的还不是汉字。。。(醉!)
————————————————————————————————————————————
一、字符形成、展示、拼接、切片
1、字符形成=R=paste
双引号包裹单引号
>>> "What's your name?" "What's your name?"
单引号使用转义符
>>> 'What\'s your name?' "What's your name?"
2、字符串展示print /raw_input
>>> name = raw_input("input your name:") input your name:python >>> name 'python'
其中raw_input有点交互关系,具体看案例,直接键入name就可以获得你输入的内容。
>>> print("hello, world") hello, world
3、字符切片、选择、截取 =R=无
字符可以像一般的数据格式一样进行切片选择,有点像series:
>>> lang = "study Python" >>> lang[0] 's' >>> lang[2:9] 'udy pyt'
当然也包括lang[:]可以选中所有的。
其中index代表着某个字符的索引值。
lang.index("p")
4、内存编号 =R= 无
这个与R中不一样,当数据存入python之后,机器会自动给存入内存的数据编号,这个编号可以用id来查看。
>>> id(c) 3071934536L >>> id(lang) 3071934536L
5、ASCII 值(是十进制的)
ord("a") 代表输入字符返回ASCII值
cha(97) 代表输入ASCII值返回字符
>>> cmp("a","b") #a-->97, b-->98, 97 小于 98,所以 a 小于 b -1
其中cmp()代表比较 a b 两个字符的ASCII值的大小,返回值为1,0,-1
>>> max(str1) 'd' >>> max(str2) 'e' >>> min(str1) 'a'
返回字符的ASCII值的最大值。
————————————————————————————————————————————
二、字符串基本操作
1、字符串重复 =R=rep
>>> str1*3 'abcdabcdabcd'
其中变成字符串有两种方式:一种是str()或者是用单引号来表示。
2、字符串拼接
(1)+
号 =R= paste
>>> "Py" + "thon" 'Python' >>> a = 1989 >>> b = "free" >>> print b+“a” >>> print b+str(a)
其中变成字符串有两种方式:一种是str()或者是用单引号来表示。
乘法,就是重复那个字符串的含义。
(2)join =R= paste
['www', 'itdiffer', 'com'] >>> ".".join(c) 'www.itdiffer.com'
用 . 来填补间隔中的内容。
3、语句分割split =R= split
这个函数的作用是将字符串根据某个分割符进行分割。
>>> a = "I LOVE PYTHON" >>> a.split(" ") ['I', 'LOVE', 'PYTHON']
其中split(“ ”)括号中,代表着依据什么样式来进行分割。
4、字符串去掉空格 = R=grep
方法是:
- S.strip() 去掉字符串的左右空格
- S.lstrip() 去掉字符串的左边空格
- S.rstrip() 去掉字符串的右边空格
>>> b=" hello " # 两边有空格 >>> b.strip() 'hello'
5、字符串大小写
在 Python 中有下面一堆内建函数,用来实现各种类型的大小写转化
- S.upper() #S 中的字母大写
- S.lower() #S 中的字母小写
- S.capitalize() # 首字母大写
- S.isupper() #S 中的字母是否全是大写
- S.islower() #S 中的字母是否全是小写
- S.istitle()
S.title() #把所有的单词的第一个字母转化为大写
S.istitle() #判断每个单词的第一个字母是否为大写
6、in 包含关系 =R=%in%
类似集合计算,a in b代表a是否包含在b中,返回的是布尔值。
>>> "a" in str1 True >>> "de" in str1 False >>> "de" in str2 True
7、字符长度len =R= length
>>> a="hello" >>> len(a) 5
————————————————————————————————————————————
三、转义符、占用符列表
1、转义符列表
在字符串中,有时需要输入一些特殊的符号,但是,某些符号不能直接输出,就需要用转义符。所谓转义,就是不采用符号本来的含义,而采用另外一含义了。下面表格中列出常用的转义符:
转义字符 | 描述 |
---|---|
\ | (在行尾时) 续行符 |
\ | 反斜杠符号 |
\' | 单引号 |
\" | 双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\e | 转义 |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\oyy | 八进制数,yy 代表的字符,例如:\o12 代表换行 |
\xyy | 十六进制数,yy 代表的字符,例如:\x0a 代表换行 |
\other | 其它的字符以普通格式输出 |
以上所有转义符,都可以通过交互模式下 print 来测试一下,感受实际上是什么样子的。
2、占位符
占位符在自动生成字符内容方面有很好的应用:
>>> print "我%s喜欢NLP" % "非常" 我非常喜欢NLP
(1)老式占位符%s
另外,不同的占位符,会表示那个位置应该被不同类型的对象填充。下面列出许多,供参考。不过,不用记忆,常用的只有 %s
和 %d
,或者再加上 %f
,其它的如果需要了,到这里来查即可。
占位符 | 说明 |
---|---|
%s | 字符串(采用 str()的显示) |
%r | 字符串(采用 repr()的显示) |
%c | 单个字符 |
%b | 二进制整数 |
%d | 十进制整数 |
%i | 十进制整数 |
%o | 八进制整数 |
%x | 十六进制整数 |
%e | 指数 (基底写为 e) |
%E | 指数 (基底写为 E) |
%f | 浮点数 |
%F | 浮点数,与上相同 |
%g | 指数(e) 或浮点数 (根据显示长度) |
%G | 指数(E)或浮点数 (根据显示长度) |
(2)新式{}
>>> print "我{}喜欢NLP" .format("非常") 我非常喜欢NLP
Python 非常提倡的 string.format()
的格式化方法,其中 {}
作为占位符。
这种方法真的是非常好,而且非常简单,只需要将对应的东西,按照顺序在 format 后面的括号中排列好,分别对应占位符 {}
即可。我喜欢的方法。
————————————————————————————————————————————
四、Python 中如何避免中文是乱码
这个问题是一个具有很强操作性的问题。我这里有一个经验总结,分享一下,供参考:
首先,提倡使用 utf-8 编码方案,因为它跨平台不错。
经验一:在开头声明:
# -*- coding: utf-8 -*-
有朋友问我-*-有什么作用,那个就是为了好看,爱美之心人皆有,更何况程序员?当然,也可以写成:
# coding:utf-8
经验二:遇到字符(节)串,立刻转化为 unicode,不要用 str(),直接使用 unicode()
unicode_str = unicode('中文', encoding='utf-8')
print unicode_str.encode('utf-8')
经验三:如果对文件操作,打开文件的时候,最好用 codecs.open,替代 open(这个后面会讲到,先放在这里)
import codecs
codecs.open('filename', encoding='utf8')
大多来源于:极客学院的《从零开始学
Python》(第二版)