python字符串和列表


字符串介绍

python中字符串的格式

  • 如下定义的变量a,存储的是数字类型的值
    a = 100
  • 如下定义的变量b,存储的是字符串类型的值
    b = "hello itcast.cn"
     或者
     b = 'hello itcast.cn'
  • 双引号或者单引号中的数据,就是字符串

字符串输出

demo

name = 'xiaoming'
    position = '讲师'
    address = '北京市昌平区建材城西路金燕龙办公楼1层'

    print('--------------------------------------------------')
    print("姓名:%s"%name)
    print("职位:%s"%position)
    print("公司地址:%s"%address)
    print('--------------------------------------------------')

结果:

--------------------------------------------------
    姓名: xiaoming
    职位: 讲师
    公司地址: 北京市昌平区建材城西路金燕龙办公楼1层
    --------------------------------------------------

字符串输入

之前在学习input的时候,通过它能够完成从键盘获取数据,然后保存到指定的变量中;

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

  • demo:

    userName = input('请输入用户名:')
      print("用户名为:%s"%userName)
    
      password = input('请输入密码:')
      print("密码为:%s"%password)
  • 结果:(根据输入的不同结果也不同)

    请输入用户名:dongGe
      用户名为: dongGe
      请输入密码:haohaoxuexitiantianxiangshang
      密码为: haohaoxuexitiantianxiangshang

下标和切片

  • 1. 下标索引
    所谓“下标”,就是编号,就好比超市中的存储柜的编号,通过这个编号就能找到相应的存储空间
    生活中的 “下标”:

    超市储物柜
    高铁二等座
    高铁一等座
    绿皮车

字符串中”下标”的使用:
列表与元组支持下标索引好理解,字符串实际上就是字符的数组,所以也支持下标索引。
如果想取出部分字符,那么可以通过下标的方法,(注意python中下标从 0 开始)

name = 'abcdef'

   print(name[0])
   print(name[1])
   print(name[2])
  • 2. 切片
    切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。
  • *切片的语法:[起始:结束:步长]**

注意:选取的区间属于左闭右开型,即从”起始”位开始,到”结束”位的前一位结束(不包含结束位本身)。

如果取出一部分,则可以在中括号[]中,使用:

name = 'abcdef'

     print(name[0:3]) # 取 下标0~2 的字符

      name = 'abcdef'

     print(name[0:5]) # 取 下标为0~4 的字符

     name = 'abcdef'

     print(name[3:5]) # 取 下标为3、4 的字符

     name = 'abcdef'

     print(name[2:]) # 取 下标为2开始到最后的字符

     name = 'abcdef'

     print(name[1:-1]) # 取 下标为1开始 到 最后第2个  之间的字符

demo:

>>> a = "abcdef"
>>> a[:3]
'abc'
>>> a[::2]
'ace'
>>> a[5:1:2] 
''
>>> a[1:5:2]
'bd'
>>> a[::-2]
'fdb' 
>>> a[5:1:-2]
'fd'

字符串常见操作

如有字符串mystr = ‘hello world itcast and itcastcpp’,以下是常见的操作

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

    mystr.find(str, start=0, end=len(mystr))
  • <2>index
    跟find()方法一样,只不过如果str不在 mystr中会报一个异常.

    mystr.index(str, start=0, end=len(mystr)) 
  • <3>count
    返回 str在start和end之间 在 mystr里面出现的次数

    mystr.count(str, start=0, end=len(mystr))
  • <4>replace
    把 mystr 中的 str1 替换成 str2,如果 count 指定,则替换不超过 count 次.

    mystr.replace(str1, str2,  mystr.count(str1))
  • <5>split
    以 str 为分隔符切片 mystr,如果 maxsplit有指定值,则仅分隔 maxsplit 个子字符串

    mystr.split(str=" ", 2)   
  • <6>capitalize
    把字符串的第一个字符大写

    mystr.capitalize()
  • <7>title
    把字符串的每个单词首字母大写

        >>> a = "hello itcast"
      >>> a.title()
    'Hello Itcast'
  • <3>count
    返回 str在start和end之间 在 mystr里面出现的次数

    mystr.count(str, start=0, end=len(mystr))
  • <8>startswith
    检查字符串是否是以 obj 开头, 是则返回 True,否则返回 False

    mystr.startswith(obj)
  • <9>endswith
    检查字符串是否以obj结束,如果是返回True,否则返回 False.

    mystr.endswith(obj)
  • <10>lower
    转换 mystr 中所有大写字符为小写

    mystr.lower()        
  • <11>upper
    转换 mystr 中的小写字母为大写

    mystr.upper()   
  • <12>ljust
    返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串

    mystr.ljust(width) 
  • <13>rjust
    返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串

    mystr.rjust(width)      
  • <10>lower
    转换 mystr 中所有大写字符为小写

    mystr.lower()        
  • <14>center
    返回一个原字符串居中,并使用空格填充至长度 width 的新字符串

    mystr.center(width)        
  • <15>lstrip
    删除 mystr 左边的空白字符

    mystr.lstrip()
  • <16>rstrip
    删除 mystr 字符串末尾的空白字符

    mystr.rstrip()        
  • <17>strip
    删除mystr字符串两端的空白字符

        >>> a = "\n\t itcast \t\n"
      >>> a.strip()
    '    itcast'   
  • <18>rfind
    类似于 find()函数,不过是从右边开始查找.

    mystr.rfind(str, start=0,end=len(mystr) )     
  • <19>rindex
    类似于 index(),不过是从右边开始.

    mystr.rindex( str, start=0,end=len(mystr))      

列表介绍

<1>列表的格式

变量A的类型为列表

namesList = ['xiaoWang','xiaoZhang','xiaoHua']

比C语言的数组强大的地方在于列表中的元素可以是不同类型的

testList = [1, 'a']

<2>打印列表

demo:

namesList = ['xiaoWang','xiaoZhang','xiaoHua']
    print(namesList[0])
    print(namesList[1])
    print(namesList[2])

结果:

xiaoWang
    xiaoZhang
    xiaoHua

列表的循环遍历

    1. 使用for循环
      为了更有效率的输出列表的每个数据,可以使用循环来完成
      namesList = ['xiaoWang','xiaoZhang','xiaoHua']
      for name in namesList:
         print(name)
xiaoWang
    xiaoZhang
    xiaoHua
    1. 使用while循环
      为了更有效率的输出列表的每个数据,可以使用循环来完成

      namesList = ['xiaoWang','xiaoZhang','xiaoHua']
      
      length = len(namesList)
      
      i = 0
      
      while i<length:
         print(namesList[i])
         i+=1
         
xiaoWang
    xiaoZhang
    xiaoHua

列表的相关操作

<1>添加元素(“增”append, extend, insert)

  • append
    通过append可以向列表添加元素

    #定义变量A,默认有3个元素
      A = ['xiaoWang','xiaoZhang','xiaoHua']
    
      print("-----添加之前,列表A的数据-----")
      for tempName in A:
          print(tempName)
    
      #提示、并添加元素
      temp = input('请输入要添加的学生姓名:')
      A.append(temp)
    
      print("-----添加之后,列表A的数据-----")
      for tempName in A:
          print(tempName)
  • extend
    通过extend可以将另一个集合中的元素逐一添加到列表中

    >>> a = [1, 2]
    >>> b = [3, 4]
    >>> a.append(b)
    >>> a
    [1, 2, [3, 4]]
    >>> a.extend(b)
    >>> a
    [1, 2, [3, 4], 3, 4]
  • ** insert**
    insert(index, object) 在指定位置index前插入元素object
    >>> a = [0, 1, 2]
    >>> a.insert(1, 3)
    >>> a
    [0, 3, 1, 2]

<2>修改元素(“改”)

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

#定义变量A,默认有3个元素
    A = ['xiaoWang','xiaoZhang','xiaoHua']

    print("-----修改之前,列表A的数据-----")
    for tempName in A:
        print(tempName)

    #修改元素
    A[1] = 'xiaoLu'

    print("-----修改之后,列表A的数据-----")
    for tempName in A:
        print(tempName)

<3>查找元素(“查”in, not in, index, count)

所谓的查找,就是看看指定的元素是否存在

  • in, not in
    python中查找的常用方法为:
  • in(存在),如果存在那么结果为true,否则为false
  • not in(不存在),如果不存在那么结果为true,否则false
#待查找的列表
    nameList = ['xiaoWang','xiaoZhang','xiaoHua']

    #获取用户要查找的名字
    findName = input('请输入要查找的姓名:')

    #查找是否存在
    if findName in nameList:
        print('在字典中找到了相同的名字')
    else:
        print('没有找到')

说明:
in的方法只要会用了,那么not in也是同样的用法,只不过not in判断的是不存在

  • index, count
    index和count与字符串中的用法相同
    >>> a = ['a', 'b', 'c', 'a', 'b']
    >>> a.index('a', 1, 3) # 注意是左闭右开区间
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    ValueError: 'a' is not in list
    >>> a.index('a', 1, 4)
    3
    >>> a.count('b')
    2
    >>> a.count('d')
    0

<4>删除元素(“删”del, pop, remove)

类比现实生活中,如果某位同学调班了,那么就应该把这个条走后的学生的姓名删除掉;在开发中经常会用到删除这种功能。

列表元素的常用删除方法有:

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

demo:(del)

movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']

    print('------删除之前------')
    for tempName in movieName:
        print(tempName)

    del movieName[2]

    print('------删除之后------')
    for tempName in movieName:
        print(tempName)

demo:(pop)

movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']

    print('------删除之前------')
    for tempName in movieName:
        print(tempName)

    movieName.pop()

    print('------删除之后------')
    for tempName in movieName:
        print(tempName)

demo:(remove)

movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']

    print('------删除之前------')
    for tempName in movieName:
        print(tempName)

    movieName.remove('指环王')

    print('------删除之后------')
    for tempName in movieName:
        print(tempName)

<5>排序(sort, reverse)

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

reverse方法是将list逆置。

    >>> a = [1, 4, 2, 3]
    >>> a
    [1, 4, 2, 3]
    >>> a.reverse()
    >>> a
    [3, 2, 4, 1]
    >>> a.sort()
    >>> a
    [1, 2, 3, 4]
    >>> a.sort(reverse=True)
    >>> a
    [4, 3, 2, 1]
``` 

### 列表的嵌套
* 1. 列表嵌套
类似while循环的嵌套,列表也是支持嵌套的

一个列表中的元素又是一个列表,那么这就是列表的嵌套

schoolNames = [[‘北京大学’,’清华大学’],
[‘南开大学’,’天津大学’,’天津师范大学’],
[‘山东大学’,’中国海洋大学’]]


* 2. 应用
一个学校,有3个办公室,现在有8位老师等待工位的分配,请编写程序,完成随机的分配

#encoding=utf-8

import random

定义一个列表用来保存3个办公室

offices = [[],[],[]]

定义一个列表用来存储8位老师的名字

names = [‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’]

i = 0
for name in names:
index = random.randint(0,2)
offices[index].append(name)

i = 1
for tempNames in offices:
print(‘办公室%d的人数为:%d’%(i,len(tempNames)))
i+=1
for name in tempNames:
print(“%s”%name,end=’’)
print(“\n”)
print(“-“*20)


文章作者: 邓滔
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 邓滔 !
评论
  目录