飞道的博客

金丹期前期:1.4、python语言-python的程序的核心数据类型:字符串、列表、元组、字典

279人阅读  评论(0)

 

一、字符串

1、字符串的表示方式

双引号或者单引号中的数据,就是字符串,如下所示:


  
  1. a = "hello itcast.cn"
  2. b = 'hello itcast.cn'

2、字符串的输出


  
  1. name = "Linbo" #""双引号
  2. position = '工程师' #''单引号
  3. address = "杭州市余杭区"
  4. print( '--------------------------------------------------')
  5. print( "姓名:%s"%name)
  6. print( "职位:%s"%position)
  7. print( "公司地址:%s"%address)
  8. print( '--------------------------------------------------')

3、字符串的输入


  
  1. userName = input( '请输入用户名:')
  2. print( "用户名为:%s"%userName)
  3. password = input( '请输入密码:')
  4. print( "密码为:%s"%password)

input获取的数据,都以字符串的方式进行保存,即使输入的是数字,那么也是以字符串方式保存!!

4、字符串的常用操作(可认为是string对象的方法,但不改变原有字符串对象)

  • find:检测 str 是否包含在 mystr中,如果是返回str开始的索引值,否则返回-1

    
        
    1. #!/usr/bin/python3
    2. #coding=utf-8
    3. mystr = "Linbo, you have to play the game!!"
    4. str1 = "Linbo"
    5. str2 = "game"
    6. str3 = "them"
    7. l1= mystr.find(str1)
    8. l2= mystr.find(str2)
    9. l3= mystr.find(str3)
    10. print( "Str1 local:%d"%l1)
    11. print( "Str2 local:%d"%l2)
    12. print( "Str3 local:%d"%l3)

    输出结果:

    
        
    1. Str1 local:0
    2. Str2 local:28
    3. Str3 local:-1

    关键词:初始位置为0,中间的字符和空格都是算位置的!!

  • index:跟find()方法一样,只不过如果str不在 mystr中会报一个异常.


  
  1. #!/usr/bin/python3
  2. #coding=utf-8
  3. mystr = "Linbo, you have to play the game!!"
  4. str1 = "Linbo"
  5. str2 = "game"
  6. str3 = "them"
  7. l1= mystr.find(str1)
  8. print( "Str1 local:%d"%l1)
  9. l2= mystr.index(str2)
  10. print( "Str2 local:%d"%l2)
  11. l3= mystr.index(str3)
  12. print( "Str3 local:%d"%l3)

输出结果:


  
  1. Str1 local:0
  2. Str2 local:28
  3. Traceback (most recent call last):
  4. File "./1string.py", line 15, in <module>
  5. l3= mystr.index(str3)
  6. ValueError: substring not found

关键词:index需要用在异常处理处使用!!

  • count:返回 str在start和end之间 在 mystr里面出现的次数


  
  1. #!/usr/bin/python3
  2. #coding=utf-8
  3. mystr = "Linbo, you have to play the game!!"
  4. str1 = "Linbo"
  5. str2 = "game"
  6. str3 = "a"
  7. l1= mystr.find(str1)
  8. print( "Str1 local:%d"%l1)
  9. l2= mystr.index(str2)
  10. print( "Str2 local:%d"%l2)
  11. l3= mystr.count(str3)
  12. print( "Str3 count:%d"%l3)

执行结果:


  
  1. Str1 local:0
  2. Str2 local:28
  3. Str3 count:3

 

  • replace(str1,str2,mystr.count(str)):把 mystr 中的 str1 替换成 str2,如果 count 指定,则替换不超过 count 次.


  
  1. #!/usr/bin/python3
  2. #coding=utf-8
  3. mystr = "Linbo, you have to play the game!!"
  4. str1 = "Linbo"
  5. str2 = "game"
  6. str3 = "a"
  7. str4 = "life"
  8. str5 = mystr.replace(str2,str4)
  9. print( "mystr:%s"%mystr)
  10. print( "ret_str:%s"%str5)
  11. str7 = mystr.replace(str3, 'c', 2)
  12. print( "mystr:%s"%mystr)
  13. print( "ret_str:%s"%str7)

执行结果:


  
  1. mystr:Linbo, you have to play the game!!
  2. ret_str:Linbo, you have to play the life!!
  3. mystr:Linbo, you have to play the game!!
  4. ret_str:Linbo, you hcve to plcy the game!!

关键词:mystr字符串不会改变,运算结果是变换后的字符串

  • split:以 str 为分隔符切片 mystr,如果 maxsplit有指定值,则仅分隔 maxsplit 个子字符串


  
  1. list1 = mystr.split( " ")
  2. print(list1)
  3. list2 = mystr.split( " ", 2)
  4. print(list2)

执行结果:


  
  1. [ 'Linbo,', 'you', 'have', 'to', 'play', 'the', 'game!!']
  2. [ 'Linbo,', 'you', 'have to play the game!!']

关键词:分割之后的元素组成列表

  • capitalize:把字符串的第一个字符大写

  • title:把字符串的每个单词首字母大写

  • startswith:检查字符串是否是以 obj 开头, 是则返回 True,否则返回 False

  • endswith:检查字符串是否以obj结束,如果是返回True,否则返回 False.

  • lower:转换 mystr 中所有大写字符为小写

  • upper:转换 mystr 中的小写字母为大写


  
  1. print( "%d"%mystr.startswith( "Linbo"))
  2. print( "%d"%mystr.startswith( "linbo"))
  3. print( "%d"%mystr.endswith( "life!!"))
  4. print( "%d"%mystr.endswith( "game!!"))
  5. print( "%s"%mystr.lower())
  6. print( "%s"%mystr.title())
  7. print( "%s"%mystr.lower())
  8. print( "%s"%mystr.upper())
  9. print( "%s"%mystr.lower())
  10. print( "%s"%mystr.capitalize())

执行结果:


  
  1. 1
  2. 0
  3. 0
  4. 1
  5. linbo, you have to play the game!!
  6. Linbo, You Have To Play The Game!!
  7. linbo, you have to play the game!!
  8. LINBO, YOU HAVE TO PLAY THE GAME!!
  9. linbo, you have to play the game!!
  10. Linbo, you have to play the game!!

 

  • ljust:返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串

  • rjust:返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串

  • center:返回一个原字符串居中,并使用空格填充至长度 width 的新字符串

  • lstrip:删除 mystr 左边的空白字符

  • rstrip:删除 mystr 字符串末尾的空白字符

  • strip:删除mystr字符串两端的空白字符


  
  1. #!/usr/bin/python3
  2. #coding=utf-8
  3. mystr = "Linbo, you have to play the game!!"
  4. str1 = " Linbo"
  5. str2 = "game "
  6. str3 = " a "
  7. str4 = "life"
  8. print( "=================================================")
  9. print( "%s"% mystr.ljust( 50))
  10. print( "%s"% mystr.rjust( 50))
  11. print( "%s"% mystr.center( 50))
  12. print( "=================================================")
  13. print(str1.lstrip())
  14. print(str2.rstrip())
  15. print(str3.strip())

执行结果:


  
  1. =================================================
  2. Linbo, you have to play the game!!
  3. Linbo, you have to play the game!!
  4. Linbo, you have to play the game!!
  5. =================================================
  6. Linbo
  7. game
  8. a

 

  • rfind:类似于 find()函数,不过是从右边开始查找

  • rindex:类似于 index(),不过是从右边开始.

  • partition:把mystr以str分割成三部分,str前,str和str后


  
  1. #!/usr/bin/python3
  2. #coding=utf-8
  3. mystr = "Linbo, you have to play the game!!"
  4. str1 = " Linbo"
  5. str2 = "game "
  6. str3 = " a "
  7. str4 = "have to"
  8. print(mystr.partition(str4))

执行结果:

('Linbo, you ', 'have to', ' play the game!!')

关键词:返回结果是一个元组.

  • rpartition:类似于 partition()函数,不过是从右边开始.

  • splitlines:按照行分隔,返回一个包含各行作为元素的列表


  
  1. #!/usr/bin/python3
  2. #coding=utf-8
  3. mystr = "Linbo,\n you have to\n play the game!!"
  4. str1 = " Linbo"
  5. str2 = "game "
  6. str3 = " a "
  7. str4 = "have to"
  8. print(mystr.splitlines())

执行结果如下:

['Linbo,', ' you have to', ' play the game!!']

关键词:执行结果为列表

  • isalpha:如果 mystr 所有字符都是字母 则返回 True,否则返回 False

  • isdigit:如果 mystr 只包含数字则返回 True 否则返回 False.

  • isalnum:如果 mystr 所有字符都是字母或数字则返回 True,否则返回 False

  • isspace:如果 mystr 中只包含空格,则返回 True,否则返回 False.


  
  1. #!/usr/bin/python3
  2. #coding=utf-8
  3. mystr = "Linbo,you have to play the game!!"
  4. str1 = "12344"
  5. str2 = "game123445 "
  6. str3 = " a1 "
  7. str4 = " "
  8. print(mystr.isalpha())
  9. print(str1.isdigit())
  10. print(str2.isalnum())
  11. print(str3.isalpha())
  12. print(str4.isspace())

执行结果如下:


  
  1. False
  2. True
  3. False
  4. False
  5. True

 

  • join:list1中每个字符间隔处加一个"_",构造成一个新的字符串。


  
  1. #!/usr/bin/python3
  2. #coding=utf-8
  3. list1 = [ "Linbo", "you", "have to", "play the game!!"]
  4. print( "-".join(list1))
  5. print( " ".join(list1))

运行结果:


  
  1. Linbo-you-have to-play the game!!
  2. Linbo you have to play the game!!

二、列表

1、列表的格式及其打印方式


  
  1. #!/usr/bin/python3
  2. #coding=utf-8
  3. list = [ 1, True, "Linbo", 3.14]
  4. print(list)
  5. print(list[ 0])
  6. print(list[ 1])
  7. print(list[ 2])
  8. print(list[ 3])

运行结果:


  
  1. [1, True, 'Linbo', 3.14]
  2. 1
  3. True
  4. Linbo
  5. 3.14

关键词:列表内的元素可以是不同类型的,其数值打印方式可以整体打印也可以分开打印。

2、列表的遍历操作

为了更有效率的输出列表的每个数据,可以使用循环来完成


  
  1. #!/usr/bin/python3
  2. #coding=utf-8
  3. list1 = [ 1, True, "Linbo", 3.14]
  4. print(list1)
  5. print( "===============")
  6. print(list1[ 0])
  7. print(list1[ 1])
  8. print(list1[ 2])
  9. print(list1[ 3])
  10. print( "===============")
  11. for elem in list1:
  12. print(elem)
  13. print( "===============")
  14. length = len(list1)
  15. i = 0
  16. while i<length:
  17. print(list1[i])
  18. i+= 1

运行结果:


  
  1. [1, True, 'Linbo', 3.14]
  2. ===============
  3. 1
  4. True
  5. Linbo
  6. 3.14
  7. ===============
  8. 1
  9. True
  10. Linbo
  11. 3.14
  12. ===============
  13. 1
  14. True
  15. Linbo
  16. 3.14

关键词:python中没有++操作符。while中要先定义变量,获取长度才能操作列表。

3、列表的常用操作(列表对象的方法,会改变列表对象本身)

添加元素

  • 末尾添加一个元素:list1.append(elem)
  • 末尾添加一组元素:   list1.extend(list2)
  • 指定位置添加元素:   list1.insert(index,elem)

  
  1. #!/usr/bin/python3
  2. #coding=utf-8
  3. list1 = [ 1, True, "Linbo", 3.14]
  4. list2 = [ "Linbo", "have to", "play game!!"]
  5. print(list1)
  6. print( "=================")
  7. list1.append( 10)
  8. print(list1)
  9. print( "=================")
  10. list1.append(list2)
  11. print(list1)
  12. print( "=================")
  13. list1.extend(list2)
  14. print(list1)
  15. print( "=================")

运行结果:


  
  1. [1, True, 'Linbo', 3.14]
  2. =================
  3. [1, True, 'Linbo', 3.14, 10]
  4. =================
  5. [1, True, 'Linbo', 3.14, 10, [ 'Linbo', 'have to', 'play game!!']]
  6. =================
  7. [1, True, 'Linbo', 3.14, 10, [ 'Linbo', 'have to', 'play game!!'], 'Linbo', 'have to', 'play game!!']
  8. =================
  9. [1, True, 1111, 'Linbo', 3.14, 10, [ 'Linbo', 'have to', 'play game!!'], 'Linbo', 'have to', 'play game!!']

关键词:以下是错误的示例

list1 = ["Linbo","have to","play game!!"]

list1[3] = "11111"  #这种添加方式是错误的!!!
 

删除元素

  • del:根据下标进行删除
  • pop:删除最后一个元素
  • remove:根据元素的值进行删除

  
  1. #!/usr/bin/python3
  2. #coding=utf-8
  3. list1 = [ "Linbo", "have to", "play game!!"]
  4. print(list1)
  5. print( "=================")
  6. list1.pop()
  7. print(list1)
  8. print( "=================")
  9. list1.remove( "Linbo")
  10. print(list1)
  11. print( "=================")
  12. del list1[ 0]
  13. print(list1)

结果输出:


  
  1. [ 'Linbo', 'have to', 'play game!!']
  2. =================
  3. [ 'Linbo', 'have to']
  4. =================
  5. [ 'have to']
  6. =================
  7. []

关键词:del不是方法,是个函数

修改元素

要通过下标来确定要修改的是哪个元素,然后才能进行修改

list1[0] = "play again"

查找元素

  • in(存在),如果存在那么结果为true,否则为false
  • not in(不存在),如果不存在那么结果为true,否则false
  • index与字符串中的用法一样
  • count与字符串中的用法一样

  
  1. #!/usr/bin/python3
  2. #coding=utf-8
  3. list1 = [ "Linbo", "have to", "play game!!"]
  4. a= "Linbo"
  5. if a in list1:
  6. print( "list1 inlcude a")
  7. print(list1.index(a, 0, 3))
  8. print(list1.count( "have to"))

运行结果:


  
  1. list1 inlcude a
  2. 0
  3. 1

 

排序元素

  • sort:将list按特定顺序重新排列,默认为由小到大,参数reverse=True可改为倒序,由大到小。
  • reverse:是将list逆置.

  
  1. #!/usr/bin/python3
  2. #coding=utf-8
  3. list1 = [ "Linbo", "have to", "play game!!"]
  4. print(list1)
  5. list1.sort()
  6. print(list1)
  7. list1.sort(reverse= True)
  8. print(list1)
  9. list1.reverse()
  10. print(list1)

 

运行结果:


  
  1. [ 'Linbo', 'have to', 'play game!!']
  2. [ 'Linbo', 'have to', 'play game!!']
  3. [ 'play game!!', 'have to', 'Linbo']
  4. [ 'Linbo', 'have to', 'play game!!']

4.列表可以嵌套使用


  
  1. #encoding=utf-8
  2. import random
  3. # 定义一个列表用来保存3个办公室
  4. offices = [[],[],[]]
  5. # 定义一个列表用来存储8位老师的名字
  6. names = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
  7. i = 0
  8. for name in names:
  9. index = random.randint( 0, 2)
  10. offices[index].append(name)
  11. i = 1
  12. for tempNames in offices:
  13. print( '办公室%d的人数为:%d'%(i,len(tempNames)))
  14. i+= 1
  15. for name in tempNames:
  16. print( "%s"%name,end= '')
  17. print( "\n")
  18. print( "-"* 20)

三、元组

Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号。

所以元组只能通过索引获取数据,不能修改数据,任何方式的修改元组的数值都会出错

元组的内置函数:

  • count:与字符串和列表中的用法相同
  • index:与字符串和列表中的用法相同

四、字典

1、字典的表示形式:{ }

info = {'name':'Linbo', 'id':100, 'sex':'M', 'address':'杭州市余杭区'}
  • 字典和列表一样,也能够存储多个数据
  • 列表中找某个元素时,是根据下标进行的
  • 字典中找某个元素时,是根据'名字'(就是冒号:前面的那个值,例如上面代码中的'name'、'id'、'sex')
  • 字典的每个元素由2部分组成,键:值。

2、根据key访问value


  
  1. #! /usr/bin/python3
  2. #encoding=utf-8
  3. dict1 = { 'name': 'Linbo', 'id': 100, 'sex': 'M', 'address': '杭州市余杭区', 1: "hello"}
  4. print(dict1)
  5. print(dict1[ 'name'])
  6. print(dict1[ 'id'])
  7. print(dict1[ 1])
  8. print(dict1[ 'age'])

 运行结果:


  
  1. {1: 'hello', 'id': 100, 'sex': 'M', 'address': '杭州市余杭区', 'name': 'Linbo'}
  2. Linbo
  3. 100
  4. hello
  5. Traceback (most recent call last):
  6. File "./4dict.py", line 10, in <module>
  7. print(dict1[ 'age'])
  8. KeyError: 'age'

关键词:访问不存在的索引值会报错,key的数据类型可以是多样的

3、字典常用的操作

  • 获取元素:get(key)是另一种获取值的方法
  • 修改元素:只要通过key找到,即可修改
  • 添加元素:如果在使用 变量名['键'] = 数据 时,这个“键”在字典中,不存在,那么就会新增这个元素

  • 删除元素:

    • del:del dict1['name'] 删除一个,del dict1 删除字典,删除不存在的也会报错
    • clear():清空整个字典

  
  1. #! /usr/bin/python3
  2. #encoding=utf-8
  3. dict1 = { 'name': 'Linbo', 'id': 100, 'sex': 'M', 'address': '杭州市余杭区'}
  4. print(dict1)
  5. print(dict1.get( 'name'))
  6. print(dict1.get( 'age'))
  7. dict1[ 'id'] = 99
  8. print(dict1)
  9. dict1[ 'age'] = 24
  10. print(dict1)
  11. del dict1[ 'age']
  12. print(dict1)
  13. dict1.clear()
  14. print(dict1)

 执行结果:


  
  1. { 'address': '杭州市余杭区', 'name': 'Linbo', 'sex': 'M', 'id': 100}
  2. Linbo
  3. None
  4. { 'address': '杭州市余杭区', 'name': 'Linbo', 'sex': 'M', 'id': 99}
  5. { 'address': '杭州市余杭区', 'name': 'Linbo', 'age': 24, 'sex': 'M', 'id': 99}
  6. { 'address': '杭州市余杭区', 'name': 'Linbo', 'sex': 'M', 'id': 99}
  7. {}
  •  len:测量字典中,键值对的个数
  • keys:返回一个包含字典所有KEY的列表

  • values:返回一个包含字典所有value的列表

  • items:返回一个包含所有(键,值)元祖的列表

  • has_key:如果key在字典中,返回True,否则返回False


  
  1. #! /usr/bin/python3
  2. #encoding=utf-8
  3. dict1 = { 'name': 'Linbo', 'id': 100, 'sex': 'M', 'address': '杭州市余杭区'}
  4. print(dict1)
  5. print(len(dict1))
  6. l1=dict1.keys()
  7. print(l1)
  8. print(dict1.values())
  9. print(dict1.items())
  10. print(dict1.has_key( 'name'))

运行结果:


  
  1. { 'name': 'Linbo', 'id': 100, 'sex': 'M', 'address': '杭州市余杭区'}
  2. 4
  3. dict_keys([ 'name', 'id', 'sex', 'address'])
  4. dict_values([ 'Linbo', 100, 'M', '杭州市余杭区'])
  5. dict_items([( 'name', 'Linbo'), ( 'id', 100), ( 'sex', 'M'), ( 'address', '杭州市余杭区')])
  6. Traceback (most recent call last):
  7. File "./4dict.py", line 13, in <module>
  8. print(dict1.has_key( 'name'))
  9. AttributeError: 'dict' object has no attribute 'has_key'

 关键词:没有has_key???,

遍历字典的方法:


  
  1. #! /usr/bin/python3
  2. #encoding=utf-8
  3. dict1 = { 'name': 'Linbo', 'id': 100, 'sex': 'M', 'address': '杭州市余杭区'}
  4. print(dict1)
  5. print( '=============')
  6. for key in dict1.keys():
  7. print(key)
  8. print( '=============')
  9. for value in dict1.values():
  10. print(value)
  11. print( '=============')
  12. for item in dict1.items():
  13. print(item)

运行结果:


  
  1. { 'address': '杭州市余杭区', 'id': 100, 'name': 'Linbo', 'sex': 'M'}
  2. =============
  3. address
  4. id
  5. name
  6. sex
  7. =============
  8. 杭州市余杭区
  9. 100
  10. Linbo
  11. M
  12. =============
  13. ( 'address', '杭州市余杭区')
  14. ( 'id', 100)
  15. ( 'name', 'Linbo')
  16. ( 'sex', 'M')

五、下标和切片(以字符串为例)

(1)列表与元组支持下标索引,字符串实际上就是字符的数组,所以也支持下标索引

        name = 'Linbo'  :    

name[0] name[1] name[2] name[3] name[4] name[5]
L i n b o 超出范围

 

(2)切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作

切片的语法:[起始:结束:步长]

注意:选取的区间属于左闭右开型意型[   )。 即从"起始"位开始,到"结束"位的前一位结束(不包含结束位本身)。           如果结束位为空,那么表明是到结尾.

           如果步长为负值,那么是往前数.

           如果结束为负值,-1表示是最后一个字符,但是记得左闭右开的原则

name = "Linbo"

切片                                      执行结果(右侧可以超出范围)

 

六、另一种通用的遍历方法(迭代器)

  • enumerate:遍历时候可以加上索引

  
  1. #! /usr/bin/python3
  2. #encoding=utf-8
  3. dict1 = { 'name': 'Linbo', 'id': 100, 'sex': 'M', 'address': '杭州市余杭区'}
  4. list1 = [ 'a', 'b', 'c', 'd']
  5. for i, chr in enumerate(list1):
  6. print(i, chr)
  7. print( '======================')
  8. t1 = ( 1, 2, 3, 4)
  9. for i, chr in enumerate(t1):
  10. print(i, chr)
  11. print( '======================')
  12. for i, chr in enumerate(dict1):
  13. print(i, chr)

 运行结果:


  
  1. 0 a
  2. 1 b
  3. 2 c
  4. 3 d
  5. ======================
  6. 0 1
  7. 1 2
  8. 2 3
  9. 3 4
  10. ======================
  11. 0 id
  12. 1 address
  13. 2 sex
  14. 3 name

关键词:注意字典无顺序可言,而且只是key

 

 

 

 

 

 

 

 

 

 

 

 

 


转载:https://blog.csdn.net/alingbo/article/details/115440346
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场