>> s'Hello, my name is Alex,golden king.'>>> s[3:6] # 顾头不顾尾'lo,'>>> s[1:5]'ello'_创建一个python对象包括班级成绩">
赞
踩
字符串是⼀个有序的字符的集合,⽤于在计算机⾥存储和表示⽂本信息
s = "Hello, my name is Alex,golden king."
>>> 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.按照从左到右的顺序定义列表元素,下标从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
在不知道⼀个元素在列表哪个位置 的情况 下,如何 修改:
切⽚就像切⾯包,可以同时取出元素的多个值
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],
....
]
需求:
⾼低
将学员们分成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]]
我们学了列表 , 现在有个需求, 把你们公司每个员⼯的姓名、年龄、职务、⼯资存到列表⾥,你怎么存?
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万次,才能找到这个信息。列表越⼤,查找速度越慢。
好了,现在福⾳来了, 接下来学要的字典可以 查询数据⼜快、操作⼜⽅便,是⽇后开发中必备神器。
{key1:value1, key2:value2}
info = {
"name":"Alex Li",
"age" : 26
}
key -> value
: 号左边是key, 右边是value
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的值不能⼀样
新的问题⼜出现了:如果统⼀成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保存到⽂件。
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
直接写中⽂执⾏会报错的。需在⽂件开头声明⽂件的编码才能写中⽂
# -*- encoding:utf-8 -*-
print("⼩猿圈")
再执⾏就不会有错了。
不过注意如果你的电脑 是windows系统 , 你的系统默认编码是GBK ,你声明的时候要声明成GBK, 不能是utf-8, 否则依然是乱码,因为gbk⾃然不认识utf-8.
在Py2⾥编码问题⾮常头疼,若不是彻底理解编码之间的各种关系,会经常容易出现乱码⽽不知所措。到了Py3推出后,终于把默认编码改成了unicode, 同时⽂件存储编码变成了utf-8,意味着,不⽤任何声明,你就可以写各种语⾔⽂字在你的Python程序⾥。 从此,程序们⼿牵⼿过上了快乐的⽣活。
将数据源⾥的快递信息进⾏分拣,最终⽣成的数据格式如下:
{
"北京市":[
['王*⻰', '北京市海淀区苏州街⼤恒科技⼤厦南座4层'],
['庞*⻜', '北京市昌平区汇德商厦四楼403'],
....
],
"⼭东省":[
['孙*云', '⼭东省济南市⼭东省济南市历下区祥泰汇东国际,⼀号楼3005室'],
['鞠*⻰', '⼭东省潍坊市⽟清街江⼭帝景B区12号楼⼀单元14楼'],
['张*', '⼭东省济南市兴港路三庆城市主⼈']
....
],
...
....
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。