>> s'Hello, my name is Alex,golden king.'>>> s[3:6] # 顾头不顾尾'lo,'>>> s[1:5]'ello'_创建一个python对象包括班级成绩">
当前位置:   article > 正文

【Python基础】3-语法进阶_创建一个python对象包括班级成绩

创建一个python对象包括班级成绩

数据类型-⼜⻅str

字符串定义

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

创建

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

字符串特性

  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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  1. 不可变,字符串是不可变的,不能像列表⼀样修改其中某个元素,所有对字符串的修改操作其实都是相当于⽣成了⼀份新数据。

字符串常⽤操作

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

数据类型-⼜⻅list

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

定义:

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

再回顾下列表的特点

1.可存放多个值

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

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

列表的增加操作

追加,数据会追加到尾部

>>> names['alex', 'jack']
>>> names.append("rain")
>>> names.append("eva")
>>>
>>> names['alex', 'jack', 'rain', 'eva']
  • 1
  • 2
  • 3
  • 4
  • 5

插⼊,可插⼊任何位置

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

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

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

列表嵌套

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

删除操作

del 直接删

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

pop删除

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

remove 删除

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

clear 清空

>>> n2
['狗蛋', '绿⽑', '鸡头']
>>> n2.clear()
>>> n2
[]
  • 1
  • 2
  • 3
  • 4
  • 5

修改操作

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

查操作

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

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

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

切⽚

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

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

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

简写

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

取倒数后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'] #
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

倒着切

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

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

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

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

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

步⻓(跳着切)

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

简写

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

排序&反转

排序

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

反转

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

循环列表

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

打印索引

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

练习:班级分组⼩程序

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

stu_list = [
 ["Alex",100],
 ["银⻆",79],
 ["⿊姑娘",66],
 ....
]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

需求:

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

最终的数据格式如下:

new_stu_list = [
     [
       ["Alex",100],
       ["Rain",91],
     ],
     [
       ["银⻆",79],
       ["Jack",78],
     ],
     ....
     ....
]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
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]]
  • 1

数据类型-⼜⻅dict

引⼦

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

staff_list = [
 ["Alex",23,"CEO",66000],
 ["⿊姑娘",24,"⾏政",4000],
 ["佩奇",26,"讲师",40000],
 # [xxx,xx,xx,xxx]
 # [xxx,xx,xx,xxx]
 # [xxx,xx,xx,xxx]
]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

for i in staff_list:
 if i[0] == '⿊姑娘':
 print(i)
 break
  • 1
  • 2
  • 3
  • 4

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

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

dict 定义

{key1:value1, key2:value2}
  • 1
info = {
 "name":"Alex Li",
 "age" : 26
}
key -> value
  • 1
  • 2
  • 3
  • 4
  • 5

: 号左边是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]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

删除操作

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

修改操作

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

查操作

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

循环

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

求⻓度

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

解释器⾃带函数

练习题

⽣成⼀个包含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.py
 File "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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

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

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

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

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

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



  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/92466
推荐阅读
相关标签
  

闽ICP备14008679号