python3.0 数据结构

3.字符串、列表、元组、字典

3.1 字符串

  • string(字符串)

    • python 中使用单引号、双引号、三引号表示
      word='字符串'
      word="字符串"
      word="""
      此为一段
      输出保持换行
      """

    单引号双引号比较有区分的地方在I’m上
    "I'm bill"以及'I\'m bill

    • 反斜杠表示特殊符号
      words = "I said \"I love you\" "
    • 默认UTF-8编码,所有字符串都是unicode字符串
  • 转义字符

    • 转义字符可以直接出现在字符串文本中
    • 在字符串前加入r,可以直接显示不表示转义
转义字符 desc
\ 反斜杠
\’ 单引号
\” 双引号
\n 换行
\t tab横向制表符
  • 字符串的截取
    一般来说字符串截取可以用for循环,但是实在是太麻烦了,这里介绍截取函数

    str="wuhan"
    print(str)
    print(str[2])
    print(str[a:b])#起始位a,结束位b(起始位0)
    print(str[a:b:2])#起始位a,结束位b,步进2
    • 若直接到最后一位,那就可以直接省略
    • 若从第0位开始,那就可以直接省略第0个
  • 字符串的连接
    在字符串之间使用加号+即可(不同于sql还要concat函数)

  • 字符串的常见封装调用的简单介绍(爬虫常用)

用途 函数
首字母大写 capitalize()
对象解码 bytes.decode(encoding=”utf-8″,errors=”strict”)
对象编码 encode(encoding=”utf-8″,errors=”strict”)
纯字母或数字判断 isalnum()
所有字符都是字母 isalpha()
所有字符都是数字(严格向) isdigit()
所有字符都是数字(汉字罗马数字也行) isnumeric()
删除左空格 lstrip()
删除右空格 rstrip()
拆分 split()

3.2 列表

  • list列表

    • 数据结构是可以混合的(接近数学的集合概念,集合的集合)
    • 索引值以0开始,-1为从末尾开始的位置
    • 列表可以用+连接也可以*表示重复
    • 有序
  • 定义一个列表

    citylist=["wuhan","changsha","shenzhen"]
    multilist=["wuhan",1]
    print(citylist[0])#wuhan
    • 混合列表中的数据类型保持不变
    • 列表的循环遍历
      citylist=["wuhan","changsha","shenzhen"]
      for hhhh in citylist:
      print(hhhh)
  • 常用操作
    增删改查切片排序,和R很像很像

    • 增加:
      方式一:append 将整体当成一个元素,直接追加

      city= input("你想去哪?")
      citylist.append(city)#实际省略了citylist=这一坨
      for hhhh in citylist:
          print(hhhh)

      也可以在嵌套的列表中对子列表append
      方式二:extend 用于列表之间的元素逐一添加

      addcity=["hangzhou","shanghai"]
      citylist.extend(addcity)
      for hhhh in citylist:
          print(hhhh)

      方式三:insert 在第几位插入元素

      citylist.insert(1,"hangzhou")#在第二位插入(众所周知0是1)
      for hhhh in citylist:
          print(hhhh)
    • 删除:
      方式一:del 指定位置删除

      moviename=["Inside Out","CoCo","Soul"]
      del moviename[2]#众所周知这是第三个的意思
      for hhhh in moviename:
          print(hhhh)

      方式二:pop 默认弹出末尾最后一个元素

      moviename.pop()
      for hhhh in moviename:
          print(hhhh)

      方式三:remove 移除有指定内容的元素(只删除第一个)

      moviename.remove("CoCo")
      for hhhh in moviename:
          print(hhhh)
    • 改写:
      citylist[1]="hangzhou"
      for hhhh in citylist:
          print(hhhh)
    • 查找:
      方式一:遍历找在不在

      findname=input("找谁?")
      if findname in citylist:
          print("找到了")
      else:
          print("没找到")

      方式二:index
      index可以更精准指定范围,告诉准确位置

      print(citylist.index("wuhan",1,2)) #1-2位里面有没有wuhan存在,如果在,那么是第几位

      范围区间是左闭右开的,不包括右边的位置
      找不到会报错,但我们可以通过“异常处理”顺利解决
      方式三:count
      找一下具体元素有多少

      print(citylist.count("wuhan")) 
    • 排序
      方式一:reverse
      直接反转,并且改变了变量

      a=[1,23,4,5]
      print(a)
      a.reverse()
      print(a)

      方式二:sort

      a=[1,23,44,35]
      print(a)
      a.sort()#升序
      print(a)
      a.sort(reverse=True)#降序
      print(a)
  • 列表的嵌套

    schoolname=[["PKU","THU"],["NKU","TJU"],["WHU","HUST"]]#“集合的集合”
    #二维数组的访问
    print(schoolname[0])#第一个列表
    print(schoolname[0][0])#PKU
    #也可以循环(len)打印出来
  • 小应用:办公室人员分配以及查看

import random
company=[[],[],[]]
names=["Alice","Bill","Cathy","David","Edward","Fred","Gray","Harry"]
# 简单而优美的循环分配(下面)
for name in names:
    index=random.randint(0,2)
    company[index].append(name)#注意函数是圆括号
i = 1 #为了给办公室编号
for office in company:
    print("office%d有%d人哦"%(i,len(office)))
    i +=1
    for name in office:#不要忘了冒号
        print("%s"%name,end="\t")
    print("\n")
    print("-"*35)#分割线

效果如下:
file

  • 小应用:展示商品列表,做一个购物车应用
    已知:

    products=[["iphone",6999],["MacPro",14800],["小米11",3999],["茅台",1499],["CPA轻松过关",89]]
    • 打印列表

      print("-------商品列表-------")
      i = 1 
      for pro in products:
      print(i,end="\t")
      print(pro[0],end="\t")
      print(pro[1],end="\t")
      print("\n")
      i +=1
    • 购物车功能的简单实现(不考虑input check模块)
      询问用户想买什么,选择编号,将对应商品加入购物车,可以输入q退出,退出后打印购物清单,同时可以返回调整。

charts=[]
order="Y"
while order == "Y":
    trigger = 6
    print("您好,请选择编号,对应商品将加入购物车,输入q退出,退出后将打印购物清单")
    while trigger != "q":
        trigger = input("选择您的商品编号或退出")
        if trigger == "q":
            break
        charts.append(products[int(trigger) - 1])
    sumresult = 0
    for chart in charts:
        sumresult += chart[1]
    print("您所选择的商品如下:")
    # print(charts)可以但没必要
    print("-------购物车-------")
    i = 1
    for chart in charts:
        print(i, end="\t")
        print(chart[0], end="\t")
        print(chart[1], end="\t")
        print("\n")
        i += 1
    print("你一共需要支付%d元" %sumresult)
    print("还需要修改吗?Y将返回继续添加,N将结束程序")
    order = input()
else:
    print("购物愉快,一共%d元,再见"%sumresult)

file

改进角度:可直接指定加车数量的功能,加加加

3.3 元组

  • Tuple元组

    • tuple不能修改,小括号,有序
      tup1 = (1,2,3,4,55)
      tup1[0]=100 #直接报错
    • 元组可以包含可变对象(例如list),但是对象本身不变
    • 不变换电脑角度的话就是地址是不变的
      tup1=()
      #创建了空的元组
      tup2=(50)
      #数据类型变成了整形(相当于是赋值运算了)
      tup3=(50,)
      #保证了是元组
      tup4=(50,60,70)
      #标准格式

      元组读取:元组也可以切片、步进

      tup1=("abc","def",3,56)
      print(tup1[-1])
      print(tup1[1:5])#左闭右开
  • 增加

    tup1 = (1,2,3,4,55)
    tup2 = ("jc","jc")
    tup= tup1+tup2#新建
    tup1=tup1+tup2#覆盖
    print(tup)
    print(tup1)
  • 删除
    直接删除了元组变量

    tup1 = (1,2,3,4,55)
    print(tup1)
    del tup1
    print(tup1)#删了就会显示not定义了
  • 修改
    一样的~

  • 查询
    一样的~

  • 转换成元组tuple()

3.4 词典

  • dict

    • 无序的对象集合,即存储键值对形式(map)
    • 查找键(key)的速度极快
    • 提一句其占位符是%s
      d= {'M':99,'B':97,'T':78} #字典的形式
  • 访问
    通过键值对的键名,返回键值

    info={"name":"Bill","age":18}
    #利用键名name找到键值Bill
    print(info["name"])
    • 在实际中,如果访问不存在的键会报错(程序卡住),但在数据很多时,没法一个个确认,所以最好搞一个默认值
      print(info.get("gender"))
      #没有找到的话返回None
      print(info.get("gender","m"))
      #如果没有找到的话返回m
  • 增加

    #追加键值对:键名id,键值newID
    newID = input("您的学号?")
    info["id"] = newID
    print(info["id"])

    也可以合并字典

    dict1.update(dict2)
  • 删除
    del

    #删除的对象是键
    del info["name"]
    print(info["name"]) #直接报错,因为没了
    #删除的对象是字典
    del info

    clear
    清空字典“数据”

    info.clear()
    print(info)#直接空字典
  • 修改

    info["age"] = 22 #直接修改键值
    print(info["age"])
  • 查询
    实质上是遍历查询

    #查询所有 键
    print(info.keys()) #注意查出来是列表格式
    #查询所有 值
    print(info.values()) #也是列表格式
    #查询所有 项
    print(info.items()) #每一个键值对,是一个元组

    items不是item
    遍历操作时,注意到存在两变量的for循环这种之前没见过的表达方式

    #键
    for key in info.keys():
        print(key)
    #值
    for value in info.values():
        print(value)
    #同时遍历
    for key,value in info.items():
        print("key=%s,value=%s"%(key,value))
    • 补充:同时遍历广泛存在于实际中(又操作值又操作下标),使用更简洁的形式完成是重要的目标:
      wordlist = ["a","b","c","d","e"]
      #手工枚举
      i = 1
      for x in wordlist:
          print(i, x)
          i+=1
      #枚举函数
      for i,x in enumerate(wordlist):
          print(i,x)

3.5 集合(很少用上)

  • set
    • 一组键的集合,没有value但
    • set是无序的,不存在重复值(输入重复会自动省略)
      s = set([1,23,43,33,33])
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇