python-day3

这篇主要记录学习字符串和字典的心得。

一、字符串

字符串是 Python 中最常用的数据类型。我们可以使用引号('或")来创建字符串。

字符串的特性:

  • 字符串中任何一个字符不可以被修改;
  • 字符串与字符串只能合并;
  • 只能获取字符串中的一个或者多个字符串;

1、字符串的创建

创建字符串很简单,只要为变量分配一个值即可。

>>> name='bianbian'
>>> name1="bianbian"
>>> name2='''bianbian'''
>>> name
'bianbian'
>>> name1
'bianbian'
>>> name2
'bianbian'

也可以定义空字符串, 单引号、双引号、三引号都可以定义字符串。

注:

  • 三引号支持多行 ;
  • 三引号包含双引号和单引号,双引号包含单引号;

字符串不支持修改,强制修改报错。

>>> name[3]='v'
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    name[3]='v'
TypeError: 'str' object does not support item assignment

2、字符串的切片

字符串和列表,元组一样,也是可以切片.

>>> name[2:5]
'anb'
>>> name[:]
'bianbian'
>>> name[2:-1]
'anbia'
>>> name[::2]
'baba'
>>> name[0:-2]
'bianbi'

3、字符串的常用方法

通过dir()可以查看字符串的所有方法,下面对常用的一些方法解释操作一下。

>>> dir(name)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', 
'__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__',
'__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold',
'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha',
'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper',
'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit',
'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

1、capitalize() 字符串的首字母大写

>>> name.capitalize()
'Bianbian'

2、center(width,fillchar) 、ljust(width,fillchar)、rjust(width,fillchar)

这三个方法放在一起说,比较容易记忆和理解。

对于center()方法,如果width(字符宽度)小于等于(<=)字符串的长度,则返回原字符串,如果大于(>)字符串的,则用fillchar(填满字符)填满,处理结果等于width,字符串位于fillchar的中间

ljust()方法,如果字符串的长度大于width(字符宽度),则返回原字符串,如果小于width,则用fillchar(填满字符)填满,处理结果等于width,fillchar位于字符串的最右边

同理,rjust(),如果字符串的长度大于width(字符宽度),则返回原字符串,如果小于width,则用fillchar(填满字符)填满,处理结果等于width,fillchar位于字符串的最左边

注意:ljust中的l表示left的意思,表示从右向左;rjust中的r表示right的意思,表示从左向右;

>>> name.center(20,'1')
'111111bianbian111111'
>>> name.rjust(30,'2')
'2222222222222222222222bianbian'
>>> name.ljust(25,'_')
'bianbian_________________'

 3、count(sub,start=None,end=None)

统计某个字符或者字符串在整个字符串中的个数。

>>> name.count('a')
2
>>> name.count('bianbian')
1

 4、endswith(suffix,start=None.end=None),startswith(suffix,start=None.end=None)

endswith()判断字符串是否以suffix结尾,是的话返回True,不是则返回False;

反之,startswith()判断字符串是否以suffix开头,是的话返回True,不是则返回False;

>>> name.endswith('b')
False
>>> name.endswith('an')
True
>>> name.startswith('b')
True
>>> name.startswith('aa')
False

 5、find(sub,start=None,end=None),rfind(sub,start=None,end=None)

 find():全文查找sub中第一个字符所在整个字符串中的索引值,没有找到则返回-1;

rfind():从左向右查找sub中第一个字符所在整个字符串中的索引值,没有找到则返回-1;

sub:字符或者字符串,start:开始位,end:结束位,start和end默认为空时,则在整个字符串中查找

>>> name.find('a',2,5)
2
>>> name.find('q')
-1
>>> name.rfind('s',0,9)
-1
>>> name.rfind('s',3)
-1

6、format(),format_map()

format()做字符串拼接:

  • 关键字拼接 

    关键字拼接不受参数位置影响:

name = "bianbian"
age = 18
info = '''----info:----
name:{_name}
age:{_age}
'''.format(_name=name,_age=age)
print(info)
  • 占位符拼接 (推荐)

占位符拼接受参数位置影响: 

name = "bianbian"
age = 18
info = '''info:+---
name:{0}
age:{1}
'''.format(name,age)
print(info)
  • format_map() 数据格式,以字典形式传入
>>> name='name:{name},age:{age}'
>>> name.format_map({'name':'bianbian','age':18})
'name:bianbian,age:18'

 7、isalnum()、isalpha()、isdigit()

isalnum():判断字符串是否由阿拉伯数字字母,字符串仅包含英文字符和(1-9)的阿拉伯数字,且中间不能有特殊字符时返回true,否则返回false;

isalpha():判断字符串是否是纯英文字符,包含大写;

isdigit():判断字符串是否是一个整数;

>>> name = 'bian0508'
>>> name.isalnum()
True
>>> name ='3298__hfksa'
>>> name.isalnum()
False
>>> name.isalpha()
False
>>> name.isdigit()
False

8、isspace()、istitle()、isupper()

isspace():判断字符串中是否有空格;

istitle():判断字符串是否是标题(字符串中的每个单子首字母大写);

isupper():判断字符串是否大写,注意字符串必须全部是大写才会返回True,否则返回False;

>>> name.isdigit()
False
>>> name.isspace()
False
>>> name.istitle()
False
>>> name.isupper()
False
>>> name='ADH'
>>> name.isupper()
True

9、lower()、upper()、swapcase() 

 lower():字符串中的大写字母转换为小写字母;

upper():字符串中的小写字母转换为大写字母;

swapcase():字符串中的大写换成小写,把小写换成大写;

>>> name = 'BianBian'
>>> name.lower()
'bianbian'
>>> name.upper()
'BIANBIAN'
>>> name.swapcase()
'bIANbIAN'

 10、join()、index(sub,start=None,end=None)

join():序列用某个字符拼接成一个字符串,注意的是,序列的元素必须是str类型;

index():查找某个sub(字符或者子字符串)在字符串中的索引值,如果没找到会报错:ValueError: substring not found

>>> b = ['a','b','c']
>>> '+'.join(b)
'a+b+c'
>>> name.index('b')
Traceback (most recent call last):
  File "<pyshell#57>", line 1, in <module>
    name.index('b')
ValueError: substring not found
>>> name.index('a')
2
>>> name.index('an')
2

 11、strip()、lstrip()、rstrip() 

strip():删除左右两边的空格(space)和回车( );

lstrip():删掉字符串右边的空格(space)和回车( );

rstrip():删掉字符串左边的空格(space)和回车( );

>>> name = '   
bianbian
     '
>>> name.strip()
'bianbian'
>>> name.rstrip()
'   
bianbian'
>>> name.lstrip()
'bianbian
     '

12、split()、splitlines()、replace(old,new[, max])、zfill(width)

 split():分割函数,默认是以空格分割(space)生成一个列表,如果其他字符分割,输入其他字符参数;

   splitlines():以换行符分割,这个一般在windows上开发,移到Linux上执行,或者在Linux上开发,移到Windows上执行,因为换行在windows上是" ",linux上是' '

>>> name ='bian bian'
>>> name.split()
['bian', 'bian']
>>> name.split('a')
['bi', 'n bi', 'n']
>>> name ='bian
bian
bian'
>>> name.splitlines()
['bian', 'bian', 'bian']

replace(old,new[, max]):old:将被替换的子字符串; new:新字符串,用于替换old子字符串;max:可选字符串, 替换不超过 max 次,如果没有max,默认字符串zhong的全部替换;

zfill(width):如果字符的长度如果比width小,则在字符串钱用0填充,如果>=width,则返回原字符串;

>>> name ='bian
bian
bian'
>>> name.replace('an','pp',2)
'bipp
bipp
bian'
>>> name.replace('an','pp')
'bipp
bipp
bipp'
>>> name.replace('an','pp',1)
'bipp
bian
bian'
>>> name.zfill(30)
'0000000000000000bian
bian
bian'
>>> name.zfill(3)
'bian
bian
bian'

二、字典

字典是另一种可变容器模型,且可存储任意类型对象。字典是key:value的数据类型,通过key去访问value 。

 字典特性

  • 字典是无序的
  • 字典是通过key去访问value
  • 字典元素不可重复

1、字典定义

字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:

键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。

d = {key1 : value1, key2 : value2 }

>>> d ={'a':4,'b':5,'c':6}
>>> d['b']
5
>>> d
{'a': 4, 'b': 5, 'c': 6}

2、访问字典

把相应的键放入熟悉的方括弧,如下实例:

>>> d={'name':'bianbian','age':18}      
>>> d       
{'name': 'bianbian', 'age': 18}
>>> d['name']       
'bianbian'

3、字典的基本用法

1、增加

>>> d={'name':'bianbian,'age':18}
>>> d['score']=100
       
>>> d
       
{'name': 'bianbian', 'age': 18, 'score': 100}

2、修改

>>> d
       
{'name': 'bianbian', 'age': 18, 'score': 100}
>>> d['name']='pengpeng'
       
>>> d
       
{'name': 'pengpeng', 'age': 18, 'score': 100}

3、删除(del、pop、popitem) 

1、del

>>> d
       
{'name': 'pengpeng', 'age': 18, 'score': 100}
>>> del d['score']
       
>>> d
       
{'name': 'pengpeng', 'age': 18}

>>> del d
# 如果是del d的话,则是删除d这个字典
>>> d

Traceback (most recent call last):
File "<pyshell#108>", line 1, in <module>
d
NameError: name 'd' is not defined

注:如果是del d的话,则是删除d这个字典

2、pop

>>> d
       
{'name': 'pengpeng', 'age': 18}
>>> d.pop('name')
       
'pengpeng'
>>> d
       
{'age': 18}

3、popitem

随机删除字典中的一个元素
>>> d={'name': 'bianbian', 'age': 18, 'score': 100}

>>> d.popitem()
       
('score', 100)
>>> d
       
{'name': 'bianbian', 'age': 18}

4、查找

1、key值在字典中存在

>>> d={'name':'bianbian','age':18}
       
>>> 'bianbian' in d
       
False
>>> 'name' in d
       
True

key in dict 这种查找方式,可以在Python 3 也可以在Python 2.7中使用;

dict.has_key(key)在python 3 中已经废弃

>>> stu_info.has_key("name") 
True

2、get(key)

>>> d={'name':'bianbian','age':18}
       
>>> d.get('name')
       
'bianbian'
>>> d.get('bianbian')
       
>>> 

3、通过key获取value  

通过key获取value,存在key,则返回value,如果不存在,则报错:keyerror

>>> d={'name':'bianbian','age':18}

>>> d['name']
       
'bianbian'
>>> d['bianbian']
       
Traceback (most recent call last):
  File "<pyshell#123>", line 1, in <module>
    d['bianbian']
KeyError: 'bianbian'  

查找方法小结:

  • get(key)不存在key值,则返回None;通过key直接访问会报错,所以建议推荐用get(key)这个方法获取value; 
  • key in dict 这种查找方式,可以在Python 3 也可以在Python 2.7中使用;
  • dict.has_key(key)在python 3 中已经废弃

5、多级字典嵌套及操作

>>> d={'bianfengjie':{'name':'bianbian','age':18,'score':100},'shenjinpeng':{'name':'pengpeng','age':19,'score':101}}
       
>>> d
       
{'bianfengjie': {'name': 'bianbian', 'age': 18, 'score': 100}, 'shenjinpeng': {'name': 'pengpeng', 'age': 19, 'score': 101}}
>>> 

6、values()、keys()、setdefault(k,v)

value():返回字典中所有value,生成一个列表;

key():返回字典中所有key,生成一个列表;

setdefault():表示取字典中的key,如果取不到,则设置新值,相反如果取到,则返回原有默认值 

>>> d={'name':'bianbian','age':18}      
>>> d.values()      
dict_values(['bianbian', 18])
>>> d.keys()
dict_keys(['name', 'age'])
>>> d.setdefault('score',25)      
25
>>> d    
{'name': 'bianbian', 'age': 18, 'score': 25}
>>> d.setdefault('score',100)      
25
>>> d       
{'name': 'bianbian', 'age': 18, 'score': 25}

7、update(dict)、items()、fromkeys(list,默认值)、clear()

update():把两个字典合并成一个新的字典,中间有重复的key,更新替换成新值,没有重复就直接创建;

items():把字典转换成列表;

fromkeys(list,默认值):初始化一个字典;

clear():清空字典

>>> d
       
{'name': 'bianbian', 'age': 18, 'score': 25}
>>> d1={'name':'pengpeng','phone':110}
       
>>> d.update(d1)
       
>>> d
       
{'name': 'pengpeng', 'age': 18, 'score': 25, 'phone': 110}
       
>>> d.items()
       
dict_items([('name', 'pengpeng'), ('age', 18), ('score', 25), ('phone', 110)])
>>> d.fromkeys(['age','score'],100)
       
{'age': 100, 'score': 100}
>>> d
       
{'name': 'pengpeng', 'age': 18, 'score': 25, 'phone': 110}
>>> d.clear()
       
>>> d
       
{}

 4、循环字典

d = {'name': 'pengpeng', 'age': 18, 'score': 25, 'phone': 110}
#方法1
for key in d:
	print(key, d[key])
#方法2
for (k,v) in d.items():
	print(k,v)  

 结果是一样的:

('phone', 110)
('age', 18)
('score', 25)
('name', 'pengpeng')  

小结:

  • 方法1的效率比方法2的效率高,方法1是直接通过key取value;方法2是先把字典转换成一个列表,再去取值;
  • 当数据量比较大的时候,推荐使用第一种方法
原文地址:https://www.cnblogs.com/bianfengjie/p/9381721.html