python 学习笔记(一)

最近要写一个词干提取的程序,然后尝试用字符串匹配来做,结果效果不好,然后从别人那知道python有自然语言处理包,我估计借助这个开发包的话肯定能拿到不错的效果。所以说做就做,上午在图书馆里面借了一本书《python编程入门经典》James Payne写的。因为是外国教材,所以风格跟国内的也很不一样,但是经过一下午的学习感觉还可以。

自己从到大学之后就很少做笔记,即便做也是全都记在一个本子上面,但是回头找起来特别麻烦,然后...发现在博客上面整理资料是很不错的方法,不需要动笔,又能随时查看。然后整理一下知识也容易记得住。

1. 初步了解Python

首先来谈谈Python是什么吧,Python是一门编程语言,风格上跟Matlab很相近,曾经看见过一个外国哥们吐槽Python:买不起Matlab的科学家用的( ̄▽ ̄)"跟Java,C#一样都是面向对象的语言,特点上十分相近,之所以这么说是因为这些语言与C或者C++相比都已经封装得非常成熟,你不需要了解底层的工作原理,只要会用他们的方法就可以了。

2. Python的安装

Python分为2.7_和3.4_两种版本,据说兼容性不是很好而且2.7上面的很多方法都还没有3.4的对应版本,但是因为这个编译器很小,所以都装上也无妨

3. Python的数据类型和对应的一些初步的方法

    3.1 字符串和字符串打印函数

         3.1.1 字符串的声明

          安装好Python之后,首先打开编译器,如果你是2.7的,那么在命令行下输入python命令即可进入编译器模式,如果是3._的版本,可以通过IDLE(所有程序里面可以找到)进入Shell,顺便提一下,退出的方法是输入函数exit()。

          字符串是一种很常用的变量,这一点与Java的String不一样,后者一旦赋值之后就不能再修改,但是Python可以,而Java里面BufferString是可以改变的(还是因为有缓冲区),声明方式是字符串外面加引号,引号可以是单引号,双引号,三个引号也是可以的,主要用来声明换行的字符串(可以不用输入'\n')

         

>>>"This is a string using a double qoute"
'This is a string using double quote'
>>>'This is a string using double quote'
'This is a string using double quote'
>>>"""This string has three quotes
look at what it can do!"""
'This string has three quotes\nlook at what it can do!'

       但是引号也不能随便用

>>> "I said, "Don't do it""
SyntaxError: invalid syntax

看上面的语句就报错了,错误的原因在于引号的匹配,python在看到输入的第一个双引号的时候,将它当成是字符串的开始,直到遇到 Don't 前面的双引号为止就不应该再出现其他的内容了。解决的方法,使用转移字符\"替代Don't前面的",而单引号则因为分布在双引号之内,所以Python能够识别,不会出错。类似的需要用转义字符表示的还有 字符串中的'\'必须要用'\\'才能输出,'%'也是要用'%%'才能够输出

>>> """I said, "Don't do it""""
SyntaxError: EOL while scanning string literal
<pre class="python" name="code">>>> """ I said, "Do not do it""""
SyntaxError: EOL while scanning string literal

>>> 'I said, "Do not do it"''I said, "Do not do it"'
 

上面说过Python是靠第一个引号作为字符串开始的标识的,所以只要字符串中间不出现与开头的引号对应的引号,就不会报错,从上面的实验看来,我所说的只适用于单引号和双引号,三个引号的会报错

另外,字符串可以赋值给一个变量,但是你需要像C++,Java一样说明变量的类型,Python可以自动识别

>>> name = "This is a string"

>>> name = 'This is a string'

        3.1.2字符串的打印和拼接

            打印调用print()函数,括号中输入字符串或者字符串组,不用','隔开会将两个字符串直接拼接在一起,用','隔开Python会自动在字符串之间增加空格

另外'+'可以用来拼接字符串,且拼接的字符串中间不会有空格,这一点跟Java是一样的。

>>> "Hello" + "Everyone"
'HelloEveryone'
>>> "Hello" "Everyone"
'HelloEveryone'
>>> "Hello" + " " + "Everyone"
'Hello Everyone'
>>> print("Hello", "Everyone")
Hello Everyone
>>> print("Hello" "Everyone")
HelloEveryone

          3.1.3 使用格式说明符构成字符串

所谓格式说明符,作用跟C中的输入输出函数的格式控制字是一样的作用,构成方式是'%s''%d''%f'等等,作用是在字符串中占据位置并在输出的时候将其对应的值代入到字符串中

>>> "John Q. %s" %("Public")
'John Q. Public'
>>> "John %s%s" %("Everyman", "Man")
'John EverymanMan'
>>> "John %s%s" %("Every", "Man")
'John EveryMan'

另外一些有趣的特性:

>>> "%s%s%10s" %("John", "Every", "Man")
'JohnEvery       Man'
>>> "%s %s%10s" %("John", "Every", "Man")
'John Every       Man'
>>> "%-5s%s%10s" %("John", "Every", "Man")
'John Every       Man'
>>> "%-6s%s%10s" %("John", "Every", "Man")
'John  Every       Man'
>>> "%-7s%s%10s" %("John", "Every", "Man")
'John   Every       Man'

可以看到在%和s之间加数字可以控制字符串长度,且数字为负值时字符串在输出的时候占据整个字符长度的最左边,为正时占据最右边

    3.2 数值运算

Python提供了三种类型的可用数值:整型,浮点型和复数,使用type函数能够获得一个数字或者已赋值变量的类型,注意复数中虚数单位用j

>>> type(12j + 12)
<class 'complex'>

然后除了在Shell或者Console中输一句执行一句之外,还可以像Matlab一样在文本中编写程序然后整个执行:写好程序保存成'.py'文件,Console中使用windows命令行移动到该文件夹下面输入 python filename.py即可编译执行,Shell下直接通过Shell打开该文件F5编译执行(菜单项Run->Run Module)。

另外数值的控制字的使用

>>> print("%f" % (5/3))
1.666667
>>> print("%.3f" %(5/3))
1.667

另外还可以使用 %E 来输出科学计数法表示的数字 比如 1.234E12 1.22E-3, %.02f保留两位小数 %0.f只保留整数部分,%x 输出16进制小写,%X16进制大写,%o八进制等

>>> print("Hex uses the letter 'x' or 'X'. %d %x %X" %(10, 10, 10))
Hex uses the letter 'x' or 'X'. 10 a A

注意字符串不能和整数相加

>>> "This is a string" + 4
Traceback (most recent call last):
  File "<pyshell#183>", line 1, in <module>
    "This is a string" + 4
TypeError: Can't convert 'int' object to str implicitly

但是可以通过str()将数字转化为字符

>>> "This is a string" + str(4)
'This is a string4'
>>> "This is a sting""" + str(4)
'This is a sting4'
>>> "This is a string""" + str(4)
'This is a string4'

      3.3 数据结构 元组,列表,字典和集合

元组(tuple),列表(list),字典和集合,是类似于c++里面数组的数据结构,但是他们的元素更加丰富,可以是字符串。下面是他们之间的联系和区别

首先,形式不同,元组的声明 variable_name = ("string1", "string2", "string3"...)

元素调用要用[],超出范围报错,len()可以返回元组长度

>>> filler = ("string", "filled", "by a", "tuple")
>>> print(filler)
('string', 'filled', 'by a', 'tuple')
>>> filler(1)
Traceback (most recent call last):
  File "<pyshell#28>", line 1, in <module>
    filler(1)
TypeError: 'tuple' object is not callable
>>> filler[1]
'filled'
>>> print(filler[9])
Traceback (most recent call last):
  File "<pyshell#30>", line 1, in <module>
    print(filler[9])
IndexError: tuple index out of range
>>> print(filler[0])
string
>>> print(len(filler))
4

另外单元素元组的声明要在末尾加上',',否则会被当作字符串处理

>>> single_element_tuple = ("the sole element",)


列表的声明 variable_name = ["string1", "string2", "string3"...]与元组类似,但是不同的是 元组的元素是不能更改的,也不能为它增加或者删减元素,但是列表式可以的,有点类似于C++里面的链表或者堆栈,可以用pop(index)方法将列表中的第index + 1个元素弹出,同时形成一个新的列表。另外,可以通过append()增加一个元素,或者通过extend()方法增加一组元素,这一点元组是无法做到的,因为元组无法更改,然而列表可以通过以上的某一种方法调用元组并将元组的元素增加到list中


字典的声明 variable_name = {"tagname1": "content1_of_tag1", "content2_of_tag1","tagname2": "content1_of_tag2", "content2_of_tag2"...}字典可以为每个字符或者字符组增加一个标签,标签名可以用单引号也可以用双引号,另外还可以分开声明

>>> menus_specials = {}
>>> menus_specials["breakfast"] = "Canadian ham"
>>> menus_specials["lunch"] = "tuna surprise"
>>> menus_specials["dinner"] = "Cheeseburger Deluxe"
>>> print(menus_specials)
{'dinner': 'Cheeseburger Deluxe', 'breakfast': 'Canadian ham', 'lunch': 'tuna surprise'}

即首先创建一个空字典,然后再为空字典添加字符串和标签,这是一个很好的特性,另外一个应用是为名字建立索引:

>>> last_names = ["Douglass", "Jefferson", "Williams", "Frank", "Thomas"]
>>> by_letter = {}
>>> by_letter[last_names[0][0]] = last_names[0]
>>> by_letter[last_names[1][0]] = last_names[1]
>>> by_letter[last_names[2][0]] = last_names[2]
>>> by_letter[last_names[3][0]] = last_names[3]
>>> by_letter[last_names[4][0]] = last_names[4]
>>> print(by_letter)
{'J': 'Jefferson', 'F': 'Frank', 'W': 'Williams', 'D': 'Douglass', 'T': 'Thomas'}

可以通过keys()方法和values()方法分别返回索引和值,同时可以用list方法将结果列出来

>>> print(menus_specials.keys())
dict_keys(['dinner', 'breakfast', 'lunch'])
>>> print(list(menus_specials.keys()))
['dinner', 'breakfast', 'lunch']
>>> hungry = menus_specials.keys()
>>> print(list(hungry))
['dinner', 'breakfast', 'lunch']
>>> starving = menus_specials.values()
>>> print(starving)
dict_values(['2 hot dogs onion rings', 'sausage and eggs', 'spilt pea soup and garlic bread'])

最后是集合,集合并没有声明的方法,但是可以将列表通过set()方法产生该列表对应的集合,需要注意的是,列表中所有的重复元素会被去掉

>>> alphabet = ['a', 'a', 'b', 'b', 'c']
>>> alphabet
['a', 'a', 'b', 'b', 'c']
>>> alpha = set(alphabet)
>>> alpha
{'b', 'a', 'c'}



ok 今天就到这里了,没想到花了这么长时间才写完,再接再厉了q(≧▽≦q)













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值