Python基础系列将基本内容大致分为四到五个小节,每篇侧重一个方面,知识不会难,主要以小例子的形式进行解读,如果你已经入门Python,希望能帮助你复习;如果你想入门Python,希望它能帮助你跨过这个门槛。Python原生的数据类型主要有Number、String、Byte、Boolean、None、List、Tuple、Set、Dict。这篇文章主要讲的是字符串、列表、元组、集合、字典这五种类型。其余的你可以自己理解这四个。String初始化一个字符串,方便后面对字符串进行一些操作。In[5]:s1='naitangmao'In[6]:s1Out[6]:'naitangmao'字符串的索引。需要注意的是,索引下标是从0开始的。In[9]:s1[2]Out[9]:'i'字符串的一片,用冒号分隔第一个和最后一个索引位置,是一个[start:end]结构,注意不包含end对应的元素;冒号左边不写索引表示从头开始,同样右边不写索引表示截取到字符串末尾。In[8]:s1[:3]#从0开始,有0、1、2三个索引Out[8]:'nai'也可以使用切片结合负索引来翻转字符串。In[35]:s1[::-1]Out[35]:'oamgnatian'使用加法来组合字符串。在[49]:print('ab'+'%'+'cd')ab%cdsearch中,使用find方法查询元素时,会返回字符串中第一次出现的下标,如果没有找到,它将返回-1。In[11]:s1.find('a')Out[11]:1替换,replace可以实现字符串中元素的替换,比如用空格替换'tang'。in[13]:s1.replace('tang','')out[13]:'naimao'去掉空格,用strip方法去掉一个字符串首尾的空格,然后也支持指定要删除的内容。In[23]:s2='aaabbbccc'In[24]:s2Out[24]:'aaabbbccc'In[25]:s2.strip()Out[25]:'aaabbbccc'In[26]:s2=s2.strip()In[27]:s2.strip('a')#可以指定删除第一个和最后一个元素Out[27]:'bbbccc'切割,split方法可以根据元素切割字符串和将其存储在列表中;如果不输入任何参数,则直接将原始字符串存储在列表中。In[30]:s1='naitangmao'In[31]:s1.split('t')Out[31]:['nai','angmao']In[32]:s1.split()Out[32]:['naitangmao']判断字符串中是否存在某个元素。In[37]:'nai'ins1Out[37]:真分离,使用join方法将一个字符串作为分隔符来分隔另一个字符串。In[38]:s1.join('!!!')Out[38]:'!naitangmao!naitangmao!'使用%向字符串传入参数,%s传入字符串,%d传入整数,%f传入浮点数,可以控制小数点后的位数。In[40]:print('naitangmaois%s!'%'beautifulboy')naitangmao是个漂亮的男孩!In[41]:print('naitangmao%d'%66)naitangmao66In[44]:print('naitangmao%.2f'%3.1415)naitangmao3.14也可以使用format向字符串传递参数,不需要关心参数类型。In[46]:'{0}ai{1}ang{2}ao'.format('n','66','3.14')Out[46]:'nai66ang3.14ao'usebackslashtocharacter字符串被逃脱了。In[47]:print('\t')In[48]:print('\\t')\t列表也是初始化一个列表,然后方便对列表进行一系列操作。In[52]:list1Out[52]:[1,3,5,7,9,11]首先也是list的索引,list也支持负索引。In[53]:list1[2]Out[53]:5In[55]:list1[-2]#负索引Out[55]:9用区间展开切片,字符串也适用,即加一个doubleend后面的引号写的是slice的区间,这是slice最完整的结构。In[58]:list1[0:6:2]Out[58]:[1,5,9]可以使用index方法获取某个元素在列表中的位置索引,如果是会报错没有找到。In[60]:list1.index(3)Out[60]:1使用join方法将列表中的每个元素组合成一个字符串。In[121]:list1=['a','b','c']In[122]:''.join(list1)Out[122]:'abc'count方法可以统计一个元素在列表中的次数.In[63]:list1.count(5)Out[63]:1enumerate可以直接获取列表的索引和对应的元素。在[133]中:index_=[]在[134]中:value_=[]在[135]中:fori,vinenumerate(list1):...:index_.append(i)...:value_.append(v)In[136]:index_Out[136]:[0,1,2,3,4]In[137]:value_Out[137]:[3,1,4,2,5]使用zip方法合并两个列表。在[139]:list3=list(zip(index_,value_))在[140]:list3Out[140]:[(0,3),(1,1),(2,4),(3,2),(4,5)]]列表扩展的四种方式:1.append:在列表末尾添加一个元素2.insert:在指定位置插入一个元素3.extend:添加一个列表的所有元素Toanotherlist4,+:将两个列表合并成一个新列表In[68]:list1.append(12)In[69]:list1[1,3,5,7,9,11,12]In[78]]:list1.insert(0,0)In[79]:list1Out[79]:[0,1,3,5,7,9,11,12]In[80]:list1.extend([2,4])In[81]:list1Out[81]:[0,1,3,5,7,9,11,12,2,4]In[82]:list2=[6,8]In[83]:list3=list1+list2In[84]:list3Out[84]:[0,1,3,5,7,9,11,12,2,4,6,8]删除三个列表元素的方法:1.pop:从列表的指定位置删除元素并返回。如果未指定索引,则pop()返回最后一个元素并将其从列表中删除。2.remove:从列表中删除指定的元素,否则会报错。3.del:也是利用索引来删除列表的某一部分。在[91]中:列表1。pop(3)Out[91]:7In[92]:list1Out[92]:[1,3,5,9,11]In[94]:list1.删除(5)在[95]中:list1Out[95]:[1,3,9,11]在[96]中:dellist1[1:3]在[97]中:list1Out[97]:[1,11]翻转列表的三种方式:1.reverse:将列表中的元素原地翻转。2.reversed:函数对list进行反转,返回一个新的迭代器,需要和list进行转换3.切片结合负索引In[99]:list1=[1,3,5,7,9,11]In[100]:print(list1.reverse())[11,9,7,5,3,1]在[102]中:list2=list(reversed(list1))在[103]中:print(list2)[11,9,7,5,3,1]In[105]:list1[::-1]Out[105]:[11,9,7,5,3,1]实现列表排序的两种方式:1.排序:就地对列表中的元素进行排序。2.sorted:该函数对列表进行排序,形成一个新的列表3.使用lambda定义函数这两个方法默认为升序,可以通过参数reverse改变排序方式。在[106]中:list2=[3,5,2,7,1]在[108]中:list2。sort()In[109]:list2Out[109]:[1,2,3,5,7]In[116]:list3=sorted(list2,reverse=True)In[117]:list3Out[117]:[7,5,3,2,1]根据祖先中第二个元素的大小排序In[141]:list4=[(0,3),(1,1),(2,4),(3,2),(4,5)]在[142]中:print(sorted(list4,key=lambdax:x[1]))[(1,1),(3,2),(0,3),(2,4),(4,5)]就地列表操作,如sort和reverse,对于可变列表是可以的,但如果它是不可变的祖先,则只能使用sorted和reversed。复制列表的三种方式:1、使用切片直接赋值,浅复制2、copy方法、浅复制3、deepcopy方法、深复制在[25]中:list2=list1[:]在[26]中:清单3=清单1。copy()In[27]:importcopyIn[29]:list4=copy.deepcopy(list1)深拷贝和浅拷贝的区别因为涉及到数据结构,口头描述不太好理解。网上有很多带插图的博客。大家可以一探究竟。元组元组和列表非常相似,它们之间的关系类似于近亲。也就是说,列表中的很多操作也适用于元组,比如索引、切片等,但也有一些区别。这里主要说说特殊的元组。首先,元组也称为带锁的列表,即元组中的元素不能随意改变。例如,您不能随意为元组中的元素赋值。In[2]:tuple1=(1,2,3)In[3]:tuple1[2]=4会出现错误,告诉你不支持这样的操作TypeError:'tuple'objectdoesnotsupportitemassignment元组的符号不仅仅是括号,而是逗号,或者是括号和逗号的组合,看下面的例子。在[31]中:tuple2=(1)在[32]中:type(tuple2)Out[32]:int在[33]中:tuple3=(1,)在[34]中:type(tuple3)Out[34]:tupleIn[35]:tuple4=1,2,In[36]:type(tuple4)Out[36]:tuple如何初始化一个空元组?In[39]:tuple5=()In[40]:type(tuple5)Out[40]:tuple上面说了,tuple是不可变对象,自然不会有append、insert、pop等操作。元组可以用“+”加,删除可以用del,因为这是python自带的回收机制。In[42]:tuple5=tuple5[:]+(1,2,3,4,)In[43]:tuple5Out[47]:(1,2,3,4)In[50]:deltuple5#SlicingisnotsupportedIn[51]:tuple5NameError:name'tuple5'isnotdefined"*"是数字类型之间的乘积运算符,但可以表示为列表和元组之间的重复运算符。In[53]:tuple5=(1,2)In[54]:tuple5*3Out[54]:(1,2,1,2,1,2)集合是一组无序的非重复元素.基本功能包括关系测试和消除重复元素。集合对象还支持并、交、差、对称差等数学运算。首先,您可以使用大括号或set()函数来创建集合。如果要创建空集合,必须使用set()而不是{},{}用于创建字典。In[57]:set1=set()In[58]:type(set1)Out[58]:setset本身会有去重功能。In[55]:set1={1,1,2,2,3,3,4}In[56]:set1Out[56]:{1,2,3,4}当set转成列,它会自动排序。在[74]中:set2={5,5,4,2,2,0}在[75]中:list_=list(set2)在[76]中:list_Out[76]:[0,2,4,5]集合之间的一些操作。In[60]:set1={1,2,3,4}In[61]:set2={3,4,5}differenceIn[62]:set1-set2Out[62]:{1,2}and在[63]中:set1|set2Out[63]:{1,2,3,4,5}andIn[64]:set1&set2Out[64]:{3,4}onlyinset1oronlyinset2In[65]:set1^set2Out[65]:{1,2,5}使用add向集合中添加元素,使用remove删除元素。在[69]中:set1={1,2,3}在[70]中:set1.add(5)在[71]中:set1Out[71]:{1,2,3,5}在[72]中:set1.remove(2)In[73]:set1Out[73]:{1,3,5}Dictionary字典是Python中非常有用的原生数据类型。通常,序列使用连续的整数作为索引,而字典使用关键字作为索引,如果键是任何不可变类型。理解字典时,可以把它看成是键值对(key:valuepairs)的无序集合。同一字典中的键必须彼此不同。可以使用{}初始化空字典。In[77]:dict1={}In[78]:type(dict1)Out[78]:dict如果要保证某个key不在字典中,可以使用如下方法向字典中添加元素.In[81]:dict1={'a':1,'b':2}In[82]:dict1['c']=3In[83]:dict1Out[83]:{'a':1,'b':2,'c':3}如果这个key已经存在于字典中,则表示给这个key赋值。In[84]:dict1['b']=4In[85]:dict1Out[85]:{'a':1,'b':4,'c':3}keys()方法可以使用一次获取字典中的所有键,使用values()方法获取值,items()方法获取键值对的元组形式。在[86]中:list(dict1.keys())Out[86]:['a','b','c']在[87]中:list(dict1.values())Out[87]:[1,4,3]In[88]:list(dict1.items())Out[88]:[('a',1),('b',4),('c',3)]元组或列表中的嵌套元组可以转换为字典,因为保持不变性。在[89]中:dict2=dict([('e',5),('f',6)])在[90]中:dict2Out[90]:{'e':5,'f':6}In[91]:dict3=dict((('g',7),('h',8)))In[92]:dict3Out[92]:{'g':7,'h':8}当然也可以通过'='赋值的形式创建字典。In[93]:dict5=dict(i=8,j=9)In[94]:dict5Out[94]:{'i':8,'j':9}查询某个键是否存在于列表中。In[96]:'i'indict5Out[96]:TrueIn[97]:'a'indict5Out[97]:False根据key查询对应值的两种方式:1.直接使用Index的键名,缺点是如果字典中没有这个键会出错。2、使用get方法,可以设置没有键名时的返回值,默认返回None。In[98]:dict5['i']Out[98]:8In[99]:dict5['a']KeyError:'a'In[101]:dict5.get('i')Out[101]:8In[103]:dict5.get('a',"No")Out[103]:'No'字典中的几种删除方法:1.pop()方法与list不同,它必须传入一个在字典中已有键的参数。2.popitem(),和list中的pop()类似,随机删除一组键值对,而不是删除最后一个,因为字典本身是无序的。3、del方法用于删除整个字典In[107]:dict3Out[107]:{'g':7,'h':8}In[109]:dict3.pop('g')Out[109]:7In[110]:dict3.popitem()Out[110]:('h',8)clear()方法可以清除字典中的所有键值对。In[104]:dict5.clear()In[105]:dict5Out[105]:{}setdefault()方法可以传入一组键值对,如果字典中有同名键,返回键是字典中对应的值,否则,将传入的键值对存入字典中。In[115]:dict2Out[115]:{'e':5,'f':6}In[117]:dict2.setdefault('e',1)Out[117]:5In[118]:dict2.setdefault('g',7)Out[118]:7In[119]:dict2Out[119]:{'e':5,'f':6,'g':7}update()方法可用于更新字典:如果传入的键已经在字典中,则更新键对应的值。如果不是,则将传递的键值对存储到字典中。在[121]中:dict2。update({'g':10})In[122]:dict2Out[122]:{'e':5,'f':6,'g':10}In[123]:dict2.update(dict1)In[124]:dict2Out[124]:{'e':5,'f':6,'g':10,'a':1,'b':4,'c':3}总结以上是对五种数据类型的基本操作的总结,其中最常用的三种是字符串、列表和字典,应该掌握,有小伙伴肯定疑惑为什么没有写表达式呢?别着急,后面的文章中肯定会有的。以上基本操作应该是很基础的,大家一定要熟悉,还要注意每种数据类型的特点,以免相互混淆。欢迎关注公众号【奶糖猫】获取更多精彩文章
