码迷,mamicode.com
首页 > 编程语言 > 详细

python基础2

时间:2015-10-24 15:43:12      阅读:275      评论:0      收藏:0      [点我收藏+]

标签:

8.字符串的处理

1.in和 not in 来检查一个字符串是否是另外一个字符串的一部分
2.知道字符串出现的位置,使用find()和index()
3.判定字符串是否以某一特定子串开始,或是以某一特定子串结束,使用startwith()和endswith()
4.如果不带任何参数,lstrip().rstrip()和strip()分别是用来删除前导空白,结尾空白和前后空白的方法。空白包括tab,空格,回车和换行.作为一个新字符串返回
5.upper()返回一个字符串,该字符串是大写的原始字符串的大写.lower()方法返回一个字符串,该字符串是小写的原始字符串
6.split()方法是把希望作为分隔符的分割的字符串作为参数传递给它,分隔符是单个字符,例如逗号或符号.如果只是想在指定定界符第一次出现字符“n”的位置对字符串进行分割,split()使用成为max_split的第二个参数.
当一个整数值作为max_split被传递进来,split()仅对字符串分割由max_split指定的次数
7.splitlines()返回一个由字符串中每一行所组成的列表,并且保存为一组.
8.将多个字符串连接到一起,join()
9.replace()有两个参数,分别是被替换的字符串以及替换字符串.
10.unicode数字和字符映射集    计算机屏幕上显示字符时,计算机将其作为数字在内部进行处理

python join 和 split方法的使用,join用来连接字符串,split恰好相反,拆分字符串的。

 

1.join用法示例 
>>>li = [‘my‘,‘name‘,‘is‘,‘bob‘] 
>>>‘ ‘.join(li) 
‘my name is bob‘ 
>>>‘_‘.join(li) 
‘my_name_is_bob‘ 
>>> s = [‘my‘,‘name‘,‘is‘,‘bob‘] 
>>> ‘ ‘.join(s) 
‘my name is bob‘ 
>>> ‘..‘.join(s) 
‘my..name..is..bob‘ 

2.split用法示例 
>>> b = ‘my..name..is..bob‘ 
>>> b.split() 
[‘my..name..is..bob‘] 
>>> b.split("..") 
[‘my‘, ‘name‘, ‘is‘, ‘bob‘] 
>>> b.split("..",0) 
[‘my..name..is..bob‘] 
>>> b.split("..",1) 
[‘my‘, ‘name..is..bob‘] 
>>> b.split("..",2) 
[‘my‘, ‘name‘, ‘is..bob‘] 
>>> b.split("..",-1) 
[‘my‘, ‘name‘, ‘is‘, ‘bob‘] 
可以看出 b.split("..",-1)等价于b.split("..") 

4.python 判断字符串中字符类型的常用方法
 
s为字符串 
s.isalnum() 所有字符都是数字或者字母
s.isalpha() 所有字符都是字母
s.isdigit() 所有字符都是数字
s.islower() 所有字符都是小写
s.isupper() 所有字符都是大写
s.istitle() 所有单词都是首字母大写,像标题
s.isspace() 所有字符都是空白字符
判断是整数还是浮点数
a=123 
b=123.123
>>>isinstance(a,int)
True
>>>isinstance(b,float)
True
>>>isinstance(b,int)
False
 
字符串的截取和替换常用方法

一:字符串的截取
python的字符串是有序集合,我们可以通过索引来提取想要获取的字符,可以把python的字符串也做为字符串的列表就更好理解
python的字串列表有2种取值顺序:
第一种是从左到右索引默认0开始的,最大范围是字符串长度少1
s = ‘ilovepython‘
s[0]的结果是i
第二种是从右到左索引默认-1开始的,最大范围是字符串开头
s = ‘ilovepython‘
s[-1]的结果是n

上面这个是取得一个字符,如果你的实际要取得一断字符的话,可以用到python 字符串截取功能,比如:

s = ‘ilovepython‘
s[1:5]的结果是love

当使用以冒号分隔的字符串,python返回一个新的对象,结果包含了以这对偏移标识的连续的内容,左边的开始是包含了下边界,比如上面的结果包含了s[1]的值l,而取到的最大范围不包括上边界,就是s[5]的值p

多举几个里例子让大家更明白点:
s[:3]
结果是‘ilo‘,省掉:左边的话,默然左边开始的索引值是0,其实这个表达式和s[0:3]的意思是一样的。
s[:-1]
结果是:‘ilovepytho‘ 就是左边开始的索引值是0,最大范围到字符串里的最后一个字符但是不包括最后一个字符。
s[:]
结果是:‘ilovepython‘ 获取了从偏移0到末尾之间的元素,这是python 字符串拷贝

二:字符串的替换
python 字符串替换是python操作字符串的时候经常会碰到的问题,这里简单介绍下字符串替换方法。
python 字符串替换可以用2种方法实现:
1、用字符串本身的方法
2、用正则来替换字符串

下面用个例子来实验下:
a = ‘hello word‘
我把a字符串里的word替换为python
1、用字符串本身的replace方法
a.replace(‘word‘,‘python‘)
输出的结果是hello python

2、用正则表达式来完成替换:

import re
strinfo = re.compile(‘word‘)
b = strinfo.sub(‘python‘,a)
print b
输出的结果也是hello python

python中用string.maketrans和translate巧妙替换字符串

将nginx日志中字符串 [2013-07-03T00:29:40-05:00] HTTP  格式化为:"2013-07-03 00:29:40-05:00"

整条日志如下:
92.82.22.46 - - [2013-07-03T00:29:40-05:00] "GET /images/mask_bg.png HTTP/1.1" 200 195 "http://www.chlinux.net/" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" "-"
将[2013-07-03T00:29:40-05:00] 替换成为:"2013-07-03 00:29:40-05:00"

把[]换成"",然后把T替换成空格

>>> s=‘‘‘92.82.22.46 - - [2013-07-03T00:29:40-05:00] "GET /images/mask_bg.png HTTP/1.1" 200 195 "http://www.chlinux.net/" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" "-"‘‘‘
>>> table = string.maketrans(‘[]‘,‘""‘)
>>> s.translate(table)
‘92.82.22.46 - - "2013-07-03T00:29:40-05:00" "GET /images/mask_bg.png HTTP/1.1" 200 195 "http://www.chlinux.net/" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" "-"‘
>>> s.translate(table).replace(‘T‘, ‘ ‘,1)#替换掉第一个T为空格
‘92.82.22.46 - - "2013-07-03 00:29:40-05:00" "GET /images/mask_bg.png HTTP/1.1" 200 195 "http://www.chlinux.net/" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" "-"‘
也可以这样:
>>> table = re.sub(‘\[|\]‘,‘"‘,s).replace(‘T‘, ‘ ‘,1)
>>>print table
‘92.82.22.46 - - "2013-07-03 00:29:40-05:00" "GET /images/mask_bg.png HTTP/1.1" 200 195 "http://www.chlinux.net/" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" "-"‘ 

 
 
9.列表的使用
 

(1)append方法

说明:  append(x)   append方法用于在列表的尾部追加元素,参数x是插入元素的值。
举例:
#coding:utf-8
test1 = [3,4,6,7,"Hello World"]
test1.append(3.9)
    print test1  #reslut = [3, 4, 6, 7, ‘Hello World‘, 3.8999999999999999]  
 
 

(2)insert方法

 
说明:  insert(index,value)   insert方法用于在列表中插入元素。它有两个参数,index参数是索引位置,value参数是插入元素的值。
举例:
#coding:utf-8
test1 = [3,4,6,7,"Hello World"]
test1.insert(2, "insert Here")
    print test1  #result = [3, 4, ‘insert Here‘, 6, 7, ‘Hello World‘]
 
 

(3)extend方法

 
说明:    list1.extend(list2)    extend方法用于将两个列表合并,将list2列表的值添加到list1列表的后面。
举例:
#coding:utf-8
test1 = [1,2,3,4]
test2 = [5,6,7,8]
    print test1      #result = [1, 2, 3, 4]
test1.extend(test2)
    print test1      #result = [1, 2, 3, 4, 5, 6, 7, 8
 
 

(4)index方法

 
说明:  index(element)        index方法用于取得element(元素)第一次出现的索引值
举例:
#coding:utf-8
test1 = [1,2,3,4]
    print test1.index(1)   #result = 0
test2 = [1,1,1,1]
    print test2.index(1)   #result = 0
#如果element是一个不存在的值,就会出现错误提示
    print test2.index(2)  #ValueError: list.index(x): x not in list
 
 
(5)remove方法
 
说明:  remove(element)        remove方法用于从列表中移除第一次的值。
举例:
#coding:utf-8
test1 = [‘One‘,‘Two‘,‘Three‘,‘Four‘,‘Five‘]
    print test1    #result = [‘One‘, ‘Two‘, ‘Three‘, ‘Four‘, ‘Five‘]
test1.remove(‘Two‘)
    print test1   #result = [‘One‘, ‘Three‘, ‘Four‘, ‘Five‘]
#如果移除一个不存在的值,就会引发一个错误
test1.remove(‘Six‘)
    print test1  #ValueError: list.remove(x): x not in list
 
 

(6)pop方法

 
说明:pop()  pop方法用于删除列表中最后一个元素
举例:
#coding:utf-8
test1 = [‘One‘,‘Two‘,‘Three‘,‘Four‘,‘Five‘]
test1.pop()
    print test1 #result = [‘One‘, ‘Two‘, ‘Three‘, ‘Four‘]
#如果试图对一个空列表使用pop方法,则会引发一个错误!
test2 = []
    test2.pop()  #IndexError: pop from empty list
 
 
1、list:列表(即动态数组,C++标准库的vector,但可含不同类型的元素于一个list中)
a = ["I","you","he","she"] #元素可为任何类型。
下标:按下标读写,就当作数组处理
以0开始,有负下标的使用
0第一个元素,-1最后一个元素,
-len第一个元 素,len-1最后一个元素

取list的元素数量
len(list) #list的长度。实际该方法是调用了此对象的__len__(self)方法。

 

创建连续的list

L = range(1,5) #即 L=[1,2,3,4],不含最后一个元素
L = range(1, 10, 2) #即 L=[1, 3, 5, 7, 9]

 

list的方法

L.append(var) #追加元素
L.insert(index,var)
L.pop(var) #返回最后一个元素,并从list中删除之
L.remove(var) #删除第一次出现的该元素
L.count(var) #该元素在列表中出现的个数
L.index(var) #该元素的位置,无则抛异常
L.extend(list) #追加list,即合并list到L上
L.sort() #排序
L.reverse() #倒序

 

list 操作符:,+,*,关键字del

a[1:] #片段操作符,用于子list的提取
[1,2]+[3,4] #为[1,2,3,4]。同extend()
[2]*4 #为[2,2,2,2]
del L[1] #删除指定下标的元素
del L[1:3] #删除指定下标范围的元素

 

list的复制

L1 = L #L1为L的别名,用C来说就是指针地址相同,对L1操作即对L操作。函数参数就是这样传递的
L1 = L[:] #L1为L的克隆,即另一个拷贝。
list comprehension
[ <expr1> for k in L if <expr2> ]

1.列表按列排序  list sorted

如果列表的每个元素都是一个元组(tuple),我们要根据元组的某列来排序的化,可参考如下方法

下面例子我们是根据元组的第2列和第3列数据来排序的,而且是倒序(reverse=True)
a = [(‘2011-03-17‘, ‘2.26‘, 6429600, ‘0.0‘), (‘2011-03-16‘, ‘2.26‘, 12036900, ‘-3.0‘), (‘2011-03-15‘, ‘2.33‘, 15615500,‘-19.1‘)]  
print a[0][0]  
2011-03-17 
b = sorted(a, key=lambda result: result[1],reverse=True)  
print b  
[(‘2011-03-15‘, ‘2.33‘, 15615500, ‘-19.1‘), (‘2011-03-17‘, ‘2.26‘, 6429600, ‘0.0‘), (‘2011-03-16‘, ‘2.26‘, 12036900, ‘-3.0‘)]  
c = sorted(a, key=lambda result: result[2],reverse=True)  
print c  
[(‘2011-03-15‘, ‘2.33‘, 15615500, ‘-19.1‘), (‘2011-03-16‘, ‘2.26‘, 12036900, ‘-3.0‘), (‘2011-03-17‘, ‘2.26‘, 6429600, ‘0.0‘)] 

2.列表去重  set(list)

有时候需要将list中重复的元素删除,就要使用如下方法    

lst= [(1,‘sss‘),(2,‘fsdf‘),(1,‘sss‘),(3,‘fd‘)]  
set(lst)  
set([(2, ‘fsdf‘), (3, ‘fd‘), (1, ‘sss‘)])  
lst = [1, 1, 3, 4, 4, 5, 6, 7, 6]  
set(lst)  
set([1, 3, 4, 5, 6, 7]) 
 

Python中的列表(list)类似于C#中的可变数组(ArrayList),用于顺序存储结构。
创建列表
sample_list = [‘a‘,1,(‘a‘,‘b‘)]
Python 列表操作
sample_list = [‘a‘,‘b‘,0,1,3]
得到列表中的某一个值
value_start = sample_list[0]
end_value = sample_list[-1]
删除列表的第一个值
del sample_list[0]
在列表中插入一个值
sample_list[0:0] = [‘sample value‘]
得到列表的长度
list_length = len(sample_list)
列表遍历
for element in sample_list:
print(element)

Python 列表高级操作/技巧
产生一个数值递增列表

num_inc_list = range(30)
#will return a list [0,1,2,...,29]
用某个固定值初始化列表
initial_value = 0
list_length = 5
sample_list = [ initial_value for i in range(10)]
sample_list = [initial_value]*list_length
# sample_list ==[0,0,0,0,0]

 
编写类似sed命令的文件替换脚本
购物车程序练习
 
元组

一、元组特性

1、类似列表,但不可变类型,正因如此,它可以做一个字典的key
2、当处理一组对象时,这个组默认是元组类型(老写错"元祖")
3、所有的多对象,逗号分隔的,没有明确用符号定义的这些都默认为元组类型

>>> ‘abc‘,1,2,‘x‘,True
(‘abc‘, 1, 2, ‘x‘, True)
>>> x,y =1,2
>>> x,y
(1, 2)
-----------------------------
def foo1():
return obj1,obj2,obj3
def foo2():
return [obj1,obj2,obj3]
def foo3():
return (obj1,obj2,obj3)

4、逗号不要少,尽量都写,即使只有一个元素

>>> type((‘x‘))
<type ‘str‘>
>>> type((‘x‘,))
<type ‘tuple‘>
>>> tup = (‘x‘)
>>> type(tup)
<type ‘str‘>
>>> tup = (‘x‘,)
>>> type(tup)
<type ‘tuple‘>
1. 无法向元组添加元素。元组没有  append() 或 extend() 方法。  
2. 不能从元组中删除元素。元组没有 remove() 或 pop()  方法。  
3. 可以 在元组中查找元素,由于该操作不改变元组。  
4. 还可以使用 in 运算符检查某元素是否存在于元组中。 那么元组有什么好处呢? 
•  元组的速度比列表更快。如果定义了一系列常量值,而所需做的仅是对它进行遍历,那么请使用元组替代列表。 
•  对不需要改变的数据进行“ 写保护” 将使得代码更加安全。使用元组替代列表就像是有一条隐含的 assert 语句显示该数据是
•  一些元组可用作字典键(特别是包含字符串、数值和其它元组这样的不可变数据的元组)。列表永远不能当做字典键使用,因为列表不是不可变的。
 
 

10.字典的使用

 

一、映射类型

我理解中的映射类型是:键值对的关系,键(key)映射值(value),且它们是一对多的关系。
字典是Python唯一的映射类型。

扩展1:哈希表
一种数据结构,值是根据相关的键进行数据存储的,形成"键-值对"(key-value pairs),哈希表中的值是没有顺序的。

扩展2:映射类型与序列类型的区别

1):访问方式不同,序列类型用数字类型的键,而映射类型可以用其他对象类型做键(一般式字符串)

>>> lis = [‘a‘,‘b‘,‘c‘]
>>> lis[2]
‘c‘
>>> dic = {‘name‘:‘a‘,‘father‘:‘b‘,‘mother‘:‘c‘}
>>> dic[‘mother‘]
‘c‘

2):存储类型不同,映射类型的键,直接或间接地与值相关。
3):序列类型,有序之列;映射类型则无序之列

 

二、字典

1、工厂方法dict():

>>> tu=([‘a‘,‘b‘],[‘xx‘,‘yy‘])
>>> tu
([‘a‘, ‘b‘], [‘xx‘, ‘yy‘])
>>> fdict = dict(tu)
>>> fdict
{‘a‘: ‘b‘, ‘xx‘: ‘yy‘}

2、访问形式:

>>> dic
{‘father‘: ‘b‘, ‘name‘: ‘a‘, ‘mother‘: ‘c‘}
>>> for obj in dic:
    print obj

father
name
mother
>>> for obj in dic.keys():
    print obj

    
father
name
mother
>>> for obj in dic.values():
    print obj
b
a
c
>>> for obj in dic.items():
    print obj
(‘father‘, ‘b‘)
(‘name‘, ‘a‘)
(‘mother‘, ‘c‘)
>>> 

3、has_key()、in、not in来检查是否有某个键,has_key()已慢慢弃用了。

4、有则更新,无则添

5、删除

del dic[‘name‘]   #删除元素del dic #删除整个

6、操作符
[]、和 in、not in

>>> if‘name‘in dic:
    print dic[‘name‘]
a

7、相关函数
dict():创建字典
len():返回键值对数目
hash(obj):返回obj的哈希值

8、内建方法
dict.clear():删除字典中所有元素
dict.copy():浅copy
dict.formkeys():创建字典
dict.get(key,default=None):返回对应键值
dict.has_key():键是否存在
dict.items():返回字典中键值对元祖的列表
dict.keys():键的列表dict.values():值的列表
......

>>> dic.keys()
[‘father‘, ‘name‘, ‘mother‘]
>>> dic.values()
[‘b‘, ‘a‘, ‘c‘]
>>> dic.get(‘name‘)
‘a‘

 

 三、注意

 

1、不允许一个键对应多个值,一个键只能对应一项
2、当键发生冲突时,取最后一个。
3、Python不会检查键的冲突,也不会因为键的冲突而产生错误,如果检查每个键是否冲突势必会占用很多内存。

>>> dic={‘a‘:‘ss‘,‘a‘:"xxxx"}
>>> dic
{‘a‘: ‘xxxx‘}

4、键必须是可哈希的。
所有不可变类型都是可哈希的,不可变类型如(列表、字典)则不能。
不可变类型:string,integer,tuple、
可变类型:list,dict

5、值相同的数字表示相同的键,如1和1.0的哈希值是相同的,因此它们是相同的键。

>>> dic={1:‘a‘,1.0:‘b‘}
>>> dic
{1: ‘b‘}

python基础2

标签:

原文地址:http://www.cnblogs.com/muzinan110/p/4906792.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!