数据类型-⼜⻅str

字符串定义

字符串是⼀个有序的字符的集合,⽤于在计算机⾥存储和表示⽂本信息

创建

s = "Hello, my name is Alex,golden king."

字符串特性

  1. 按照从左到右的顺序定义字符集合,下标从0开始顺序访问,有序
  2. 可进⾏切⽚操作
>>> s
'Hello, my name is Alex,golden king.'
>>> s[3:6] # 顾头不顾尾
'lo,'
>>> s[1:5]
'ello'
>>> s[0:5]
'Hello'
>>>
>>> s[3:10]
'lo, my '
>>>
  1. 不可变,字符串是不可变的,不能像列表⼀样修改其中某个元素,所有对字符串的修改操作其实都是相当于⽣成了⼀份新数据。

字符串常⽤操作

下图标红框的为᯿点必须掌握的⽤法

数据类型-⼜⻅list

第⼀章我们⼤概介绍了列表的基本⽤法,本节我们学习下

定义:

[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表⼀个元素

再回顾下列表的特点

1.可存放多个值

2.按照从左到右的顺序定义列表元素,下标从0开始顺序访问,有序

3.可修改指定索引位置对应的值,可变

列表的增加操作

追加,数据会追加到尾部

>>> names['alex', 'jack']
>>> names.append("rain")
>>> names.append("eva")
>>>
>>> names['alex', 'jack', 'rain', 'eva']

插⼊,可插⼊任何位置

>>> names.insert(2,"⿊姑娘")
>>> names['alex', 'jack', '⿊姑娘', 'rain', 'eva']

合并,可以把另⼀外列表的值合并进来

>>> n2 = ["狗蛋","绿⽑","鸡头"]
>>> names=['alex', 'jack', '⿊姑娘', 'rain', 'eva']
>>> names.extend(n2)
>>> names['alex', 'jack', '⿊姑娘', 'rain', 'eva', '狗蛋', '绿⽑', '鸡头']

列表嵌套

>>> names.insert(2,[1,2,3])
>>> names ['alex', 'jack', [1, 2, 3], '⿊姑娘', 'rain', 'eva', '狗蛋', '绿⽑','鸡头']
>>> names[2][1]2

删除操作

del 直接删

>>> names
['alex', 'jack', [1, 2, 3], '⿊姑娘', 'rain', 'eva', '狗蛋', '绿⽑', '鸡头']
>>> del names[2]
>>> names
['alex', 'jack', '⿊姑娘', 'rain', 'eva', '狗蛋', '绿⽑', '鸡头']

pop删除

>>> names
['alex', 'jack', '⿊姑娘', 'rain', 'eva', '狗蛋', '绿⽑', '鸡头']
>>> names.pop() #默认删除最后⼀个元素并返回被删除的值
'鸡头'
>>> names
['alex', 'jack', '⿊姑娘', 'rain', 'eva', '狗蛋', '绿⽑']
>>> help(names.pop)
>>> names.pop(1) #删除指定元素
'jack'

remove 删除

>>> names
['alex', 'jack', '⿊姑娘', 'rain', 'eva', '狗蛋', '绿⽑', '鸡头', 'eva']
>>> names.remove("eva") # 删除第⼀个找到的eva值
>>> names
['alex', 'jack', '⿊姑娘', 'rain', '狗蛋', '绿⽑', '鸡头', 'eva']

clear 清空

>>> n2
['狗蛋', '绿⽑', '鸡头']
>>> n2.clear()
>>> n2
[]

修改操作

>>> names
['alex', '⿊姑娘', 'rain', 'eva', '狗蛋', '绿⽑']
>>> names[0] = "⾦⻆⼤王"
>>> names[-1] = "银⻆⼤王"
>>> names
['⾦⻆⼤王', '⿊姑娘', 'rain', 'eva', '狗蛋', '银⻆⼤王']

查操作

>>> names
['⾦⻆⼤王', '⿊姑娘', 'rain', 'eva', '狗蛋', '银⻆⼤王', 'eva']
>>>
>>> names.index("eva") #返回从左开始匹配到的第⼀个eva的索引
3
>>> names.count("eva") #返回eva的个数
2

在不知道⼀个元素在列表哪个位置 的情况 下,如何 修改:

  1. 先判断 在不在列表⾥, item in list
  2. 取索引,item_index = names.index(“eva”)
  3. 去修改, names[item_index] = “铁蛋”

切⽚

切⽚就像切⾯包,可以同时取出元素的多个值

names[start : end]
>>> names
['⾦⻆⼤王', '⿊姑娘', 'rain', 'eva', '狗蛋', '银⻆⼤王', 'eva']
>>> names[1:4] #不包含下标4的元素
['⿊姑娘', 'rain', 'eva']

注意:切⽚的特性是顾头不顾尾,即start的元素会被包含,end-1是实际取出来的值

简写

>>> n[0:4]
['alex', 'jack', ['makc', '陈xxx'], '⿊姑娘']
>>> n[:4]
['alex', 'jack', ['makc', '陈xxx'], '⿊姑娘']

取倒数后2个值

>>> n[0:4]
['alex', 'jack', ['makc', '陈xxx'], '⿊姑娘']
>>> n[:4]
['alex', 'jack', ['makc', '陈xxx'], '⿊姑娘']
>>> n[4:5]
['rain']
>>> n[4:6] # 超标写法
['rain', 'eva']
>>> n[4:] # 省略最后⼀个索引
['rain', 'eva'] #

倒着切

>>> names[-5:-1]
['rain', 'eva', '狗蛋', '银⻆⼤王']

但其实我想要的是后5个,只打印了4个,’eva’这个值没出来,为什么,因为上⾯提到的顾头不顾尾可是想把后5个全取出来如何做呢?

>>> names[-5:]
['rain', 'eva', '狗蛋', '银⻆⼤王', 'eva']

如果取前⼏个值 ,⼀样可以把:号左边的省掉

>>> names['⾦⻆⼤王', '⿊姑娘', 'rain', 'eva', '狗蛋', '银⻆⼤王', 'eva']
>>> names[0:3]
['⾦⻆⼤王', '⿊姑娘', 'rain']
>>> names[:3] #跟上⾯⼀样的效果
['⾦⻆⼤王', '⿊姑娘', 'rain']

步⻓(跳着切)

names[start:end:step] #step 默认是1
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[0:7:2] #设置步⻓为2
[0, 2, 4, 6]

简写

>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
>>> a[::3] #按步⻓3打印列表,第1个:是省略掉的start:end
[0, 3, 6, 9]

排序&反转

排序

>>> a = [83,4,2,4,6,19,33,21]
>>> a.sort()
>>> a
[2, 4, 4, 6, 19, 21, 33, 83]

反转

>>> names
['#', '4', '@', 'eva', 'rain', '狗蛋', '⾦⻆⼤王', '银⻆⼤王', '⿊姑娘']
>>> names.reverse()
>>> names
['⿊姑娘', '银⻆⼤王', '⾦⻆⼤王', '狗蛋', 'rain', 'eva', '@', '4', '#']

循环列表

>>> for i in names:
... print(i)
...
⿊姑娘
银⻆⼤王
⾦⻆⼤王
狗蛋
rain
eva
@
4
#

打印索引

>>> for i in enumerate(n):
... print(i[0],i[1])
...
0 Alex
1 alex
2 eva
3 rain
4 shit
5 ⿊姑娘

练习:班级分组⼩程序

你们班有55⼈,每个⼈的姓名&考试成绩存在⼀个⼤列表⾥,格式如下:

stu_list = [["Alex",100],["银⻆",79],["⿊姑娘",66],....
]

需求:

  1. 现要求按考试成绩⾼低将学员们分成5组,全存在⼀个新的⼤列表⾥, 5组分别是90-100, 80-89, 70-79,60-69, 0-59

最终的数据格式如下:

new_stu_list = [[["Alex",100],["Rain",91],],[["银⻆",79],["Jack",78],],........
]
stu_list = [['李渊', 82], ['李世⺠', 7], ['侯君集', 5], ['李靖', 58], ['魏征',41], ['房⽞龄', 64], ['杜如晦', 65], ['柴绍', 94], ['程知节', 45], ['尉迟恭', 94],['秦琼', 54], ['⻓孙⽆忌', 85], ['李存恭', 98], ['封德彝', 16], ['段志⽞', 44], ['刘弘基', 18], ['徐世绩', 86], ['李治', 19], ['武则天', 39], ['太平公主', 57], ['⻙后',76], ['李隆基', 95], ['杨⽟环', 33], ['王勃', 49], ['陈⼦昂', 91], ['卢照邻', 70],['杨炯', 81], ['王之涣', 82], ['安禄⼭', 18], ['史思明', 9], ['张巡', 15], ['雷万春', 72], ['李⽩', 61], ['⾼⼒⼠', 58], ['杜甫', 27], ['⽩居易', 5], ['王维', 14],['孟浩然', 32], ['杜牧', 95], ['李商隐', 34], ['郭⼦仪', 53], ['张易之', 39], ['张昌宗', 61], ['来俊⾂', 8], ['杨国忠', 84], ['李林甫', 95], ['⾼适', 100], ['王昌龄',40], ['孙思邈', 46], ['⽞奘', 84], ['鉴真', 90], ['⾼骈', 85], ['狄仁杰', 62], ['⻩巢', 79], ['王仙芝', 16], ['⽂成公主', 13], ['松赞⼲布', 47], ['薛涛', 79], ['⻥⽞机', 16], ['贺知章', 20], ['李泌', 17], ['韩愈', 100], ['柳宗元', 88], ['上官婉⼉ 五代⼗国:朱温', 55], ['刘仁恭', 6], ['丁会', 26], ['李克⽤', 39], ['李存勖', 11],['葛从周', 25], ['王建', 13], ['刘知远', 95], ['⽯敬瑭', 63], ['郭威', 28], ['柴荣', 50], ['孟昶', 17], ['荆浩', 84], ['刘彟', 18], ['张及之', 45], ['杜宇', 73],['⾼季兴', 39], ['喻皓', 50], ['历真', 70], ['李茂贞', 6], ['朱友珪', 7], ['朱友贞',11], ['刘守光', 2]]

数据类型-⼜⻅dict

引⼦

我们学了列表 , 现在有个需求, 把你们公司每个员⼯的姓名、年龄、职务、⼯资存到列表⾥,你怎么存?

staff_list = [["Alex",23,"CEO",66000],["⿊姑娘",24,"⾏政",4000],["佩奇",26,"讲师",40000],# [xxx,xx,xx,xxx]# [xxx,xx,xx,xxx]# [xxx,xx,xx,xxx]
]

这样存没问题,不过你要查⼀个⼈的⼯资的话, 是不是得把列表遍历⼀遍

for i in staff_list:if i[0] == '⿊姑娘':print(i)break

但假如你公司有2万⼈,如果你要找的⿊姑娘正好在列表末尾,那意味着你要遍历2万次,才能找到这个信息。列表越⼤,查找速度越慢。

好了,现在福⾳来了, 接下来学要的字典可以 查询数据⼜快、操作⼜⽅便,是⽇后开发中必备神器。

dict 定义

{key1:value1, key2:value2}
info = {"name":"Alex Li","age" : 26
}
key -> value

: 号左边是key, 右边是value

特性

  1. key-value结构
  2. key必须为不可变数据类型(字符串、数字)、必须唯⼀
  3. 可存放任意多个value、可修改、可以不唯⼀
  4. ⽆序, ordered_dict
  5. 查询速度快,且不受dict的⼤⼩影响,⾄于为何快?我们学完hash再解释。

增加操作

mes = {"alex": [23, "CEO", 66000],"⿊姑娘": [24, "⾏政", 4000],
}
# 新增k
names["佩奇"] = [26, "讲师", 40000]

删除操作

names.pop("alex") # 删除指定key
del names["oldboy"] # 删除指定key,同pop⽅法
names.clear() # 清空dict

修改操作

dic['key'] = 'new_value' # 如果key在字典中存在,'new_value'将会替代原来的value值;

查操作

dic['key'] #返回字典中key对应的值,若key不存在字典中,则报错;
dic.get(key, default = None) #返回字典中key对应的值,若key不存在字典中,则返回default的值(default默认为None)
'key' in dic #若存在则返回True,没有则返回False
dic.keys() #返回⼀个包含字典所有KEY的列表;
dic.values() #返回⼀个包含字典所有value的列表;
dic.items() #返回⼀个包含所有(键,值)元组的列表;
# k,v 2个变量
>>> for k,v in dic.items():
... print(k,v)
...
Alex [23, 'CEO', 66000]
⿊姑娘 [24, '⾏政', 4000]
佩奇 [26, '讲师', 40000]

循环

1、for k in dic.keys()
2、for k,v in dic.items()
3、for k in dic # 推荐⽤这种,效率速度最快
info = {"name":"路⻜学城","mission": "帮⼀千万极客⾼效学编程","website": "https://luffpycity.com"
}
for k in info:print(k,info[k])

求⻓度

len(info) # len()⽅法可同时⽤于列表、字符串

解释器⾃带函数

练习题

⽣成⼀个包含100个key的字典,每个value的值不能⼀样

  1. {‘k0’: 0, ‘k1’: 1, ‘k2’: 2, ‘k3’: 3, ‘k4’: 4, ‘k5’: 5, ‘k6’: 6, ‘k7’: 7, ‘k8’: 8, ‘k9’: 9} 请把这个dict中key⼤于5的值value打印出来。
  2. 把题2中value是偶数的统⼀改成-1
  3. 请设计⼀个dict, 存储你们公司每个⼈的信息, 信息包含⾄少姓名、年龄、电话、职位、⼯资,并提供⼀个简单的查找接⼝,⽤户按你的要求输⼊要查找的⼈,你的程序把查到的信息打印出来

Py2 Vs Py3编码

UTF-8

新的问题⼜出现了:如果统⼀成Unicode编码,乱码问题从此消失了。但是,如果你写的⽂本基本上全部是英⽂的话,⽤Unicode编码⽐ASCII编码需要多⼀倍的存储空间,由于计算机的内存⽐较⼤,并且字符串在内容中表示时也不会特别⼤,所以内容可以使⽤unicode来处理,但是存储和⽹络传输时⼀般数据都会⾮常多,那么增加1倍将是⽆法容忍的!!!

为了解决存储和⽹络传输的问题,出现了Unicode Transformation Format,学术名UTF,即:对unicode字符进⾏转换,以便于在存储和⽹络传输时可以节省空间!UTF-8: 使⽤1、2、3、4个字节表示所有字符;优先使⽤1个字节、⽆法满⾜则使增加⼀个字节,

最多4个字节。英⽂占1个字节、欧洲语系占2个、东亚占3个,其它及特殊字符占4个UTF-16: 使⽤2、4个字节表示所有字符;优先使⽤2个字节,否则使⽤4个字节表示。UTF-32: 使⽤4个字节表示所有字符;

总结:UTF 是为unicode编码 设计 的⼀种 在存储 和传输时节省空间的编码⽅案。如果你要传输的⽂本包含⼤量英⽂字符,⽤UTF-8编码就能节省空间:

从上⾯的表格还可以发现,UTF-8编码有⼀个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的⼀部分,所以,⼤量只⽀持ASCII编码的历史遗留软件可以在UTF-8编码下继续⼯作。搞清楚了ASCII、Unicode和UTF-8的关系,我们就可以总结⼀下现在计算机系统通⽤的字符编码⼯作

⽅式:

在计算机内存中,统⼀使⽤Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。⽤记事本编辑的时候,从⽂件读取的UTF-8字符被转换为Unicode字符到内存⾥,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到⽂件。

常⽤编码介绍⼀览表

Py2 Vs Py3编码

python⽣下来的时候 还没有unicode&utf-8, 所以⻳叔选⽤的默认编码只能是ASCII, ⼀直到py2.7,⽤的还是ASCII, 导致Py默认只⽀持英⽂,想⽀持其它语⾔,必须单独配置。

Alexs-MacBook-Pro:day2 alex$ more py2编码_ascii.py
print("⼩猿圈")
Alexs-MacBook-Pro:day2 alex$ python2.7 py2编码_ascii.pyFile "py2编码_ascii.py", line 2
SyntaxError: Non-ASCII character '\xe5' in file py2编码_ascii.py on line 2, but
no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

直接写中⽂执⾏会报错的。需在⽂件开头声明⽂件的编码才能写中⽂

# -*- encoding:utf-8 -*-
print("⼩猿圈")

再执⾏就不会有错了。
不过注意如果你的电脑 是windows系统 , 你的系统默认编码是GBK ,你声明的时候要声明成GBK, 不能是utf-8, 否则依然是乱码,因为gbk⾃然不认识utf-8.
在Py2⾥编码问题⾮常头疼,若不是彻底理解编码之间的各种关系,会经常容易出现乱码⽽不知所措。到了Py3推出后,终于把默认编码改成了unicode, 同时⽂件存储编码变成了utf-8,意味着,不⽤任何声明,你就可以写各种语⾔⽂字在你的Python程序⾥。 从此,程序们⼿牵⼿过上了快乐的⽣活。

今⽇作业-快递分拣⼩程序

将数据源⾥的快递信息进⾏分拣,最终⽣成的数据格式如下:

{"北京市":[['王*⻰', '北京市海淀区苏州街⼤恒科技⼤厦南座4层'],['庞*⻜', '北京市昌平区汇德商厦四楼403'],....],"⼭东省":[['孙*云', '⼭东省济南市⼭东省济南市历下区祥泰汇东国际,⼀号楼3005室'],['鞠*⻰', '⼭东省潍坊市⽟清街江⼭帝景B区12号楼⼀单元14楼'],['张*', '⼭东省济南市兴港路三庆城市主⼈']....],.......
}

【Python基础】3-语法进阶相关推荐

  1. Python基础入门语法

    Python基础语法目录 一.Python环境 1.python2和python3同时存在电脑时 二.HelloPython 三.数据结构 1.List 2.String 3.Dict 四.赋值_条件 ...

  2. Python基础之Scrapy进阶

    在上一篇文章Python基础之Scrapy简介中,简述了Scrapy的基本原理,安装步骤,创建项目以及如何通过Scrapy进行简单的爬虫,同时遗留了两个问题,即分页爬取,和异步内容爬取.本文以一个简单 ...

  3. python基础编程语法-Python编程入门——基础语法详解(经典)

    今天小编给大家带来Python编程入门--基础语法详解.温馨提示: 亮点在最后! 在这里还是要推荐下我自己建的Python开发学习群:301056051,群里都是学Python开发的,如果你正在学习P ...

  4. python编程语法-Python基础及语法(十三)

    数据库开发 比较有名的模块有: MySQLdb 支持Python2,不知道Python3,已停止更新 mysqlclient 在MySQLdb的基础上支持Python3 MYSQL官方Connecto ...

  5. python基础编程语法-Python编程入门——基础语法详解

    今天小编给大家带来Python编程入门--基础语法详解. 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_num ...

  6. python基础编程语法-编程入门02:Python基础语法

    现在让我们从基础概念开始逐步探索Python的语法,编程语言包含多种指令,其中最基本的是"表达式"(Expression),表达式有特定的"值"(Value), ...

  7. python基础编程语法-Python基础及语法(十三)

    数据库开发 比较有名的模块有: MySQLdb 支持Python2,不知道Python3,已停止更新 mysqlclient 在MySQLdb的基础上支持Python3 MYSQL官方Connecto ...

  8. python基础_面向对象进阶

    @property装饰器 之前我们讨论过Python中属性和方法访问权限的问题,虽然我们不建议将属性设置为私有的,但是如果直接将属性暴露给外界也是有问题的,比如我们没有办法检查赋给属性的值是否有效.我 ...

  9. [Python基础]003.语法(2)

    语法(2) 运算符 数学运算 比较运算 逻辑运算 位运算 赋值运算 其他运算 代码规范 代码缩进 多行 注释 流程控制 pass if while for break continue 运算符 数学运 ...

  10. python基础编程语法-1.Python基础语法

    1.编程语言介绍 机器语言.汇编语言.高级语言. 高级语言分为两类:编译类和解释类 编译型和解释型的对比: 小结: 2.python介绍 目前Python主要应用领域: l 云计算: 云计算最火的语言 ...

最新文章

  1. 提供企业研发管理解决方案,ONES获600万美元A+轮融资,华创资本领投
  2. DevCon工具基本使用
  3. Android教程-Java基础2 语法与关系运算
  4. nginx 防止恶意域名解析_配置nginx只允许域名访问,禁止ip访问【图文教程】
  5. 详解Java动态代理机制
  6. java基础试题_Java基础测试题带答案
  7. Perl语言入门学习笔记1
  8. java 绘制点阵_[Java基础知识]点阵字库在JAVA中的实现
  9. 拼多多卖家必知:店铺评分和评价那点事
  10. cocos2dx 精灵增加触摸事件
  11. 电脑能上QQ浏览器却无法打开
  12. 全国人工智能师资培训班·上海站火热招生中
  13. 数据结构实验——实验二链表实验
  14. 天龙八部武夷千年冰魄
  15. 2022Java后端开发面试题总结(社招+春招+秋招)
  16. 浙里办APP对接常见问题
  17. Task02:baseline学习及改进
  18. 2022年全球及中国植物甘油行业头部企业市场占有率及排名调研报告
  19. 微型计算机用什么显卡,流言终结者 侧板风扇真能给显卡降温吗
  20. 谭浩强c++第9章 题9商店销售某一商品,商店每天公布统一的折扣(discount)。同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购10件以上者,还可以享受9.8折优惠。

热门文章

  1. Download下载DRM
  2. C++学习笔记:fstream,ifstream和oftream的区别
  3. C# 读取txt文件生成Word文档
  4. android表格布局bottom,Android基础_2 Activity线性布局和表格布局
  5. ImageMagick将多张图片拼接成一张图片_如何将多张图片排列在一张图片呢?学会这两种技巧,轻松搞定...
  6. 谷歌如何注册账号?手机号无法验证处理方法!2023年最新教程!
  7. Android AOSP 下载和编译
  8. APACHE官网下载历史版本TOMCAT(以8.5.6版本为例)
  9. 开源mock server系统
  10. 01excel空白一键填充