05 常用技巧介绍(列表、元组、字典)

1 列表操作

li = ['alex', 'wusir', 'egon', '女神', 'taibai']

# 在最后的位置增加
li.append('当当')
print(li)
# 迭代加到最后的位置
li.extend('昊天')
print(li)
# 在‘女神’后面加一个123
li.insert(4,123)
print(li)
# 按索引删除,默认删除最后一个
li.pop()
print(li)
li.pop(1)
print(li)
# 按元素删除,有重复元素,删除索引最小的一个
li.append('当当')
print(li)
li.remove('当当')
print(li)

# 清空列表
li.clear()
print(li)
'''输出结果如下:
['alex', 'wusir', 'egon', '女神', 'taibai', '当当']
['alex', 'wusir', 'egon', '女神', 'taibai', '当当', '昊', '天']
['alex', 'wusir', 'egon', '女神', 123, 'taibai', '当当', '昊', '天']
['alex', 'wusir', 'egon', '女神', 123, 'taibai', '当当', '昊']
['alex', 'wusir', '女神', 123, 'taibai', '当当', '昊']
['alex', 'wusir', '女神', 123, 'taibai', '当当', '昊', '当当']
['alex', 'wusir', '女神', 123, 'taibai', '昊', '当当']
[]
'''

删除列表

li = ['alex', 'wusir', 'egon', '女神', 'taibai', '当当']
# 从0开始删除前两个:
del li[0:2]
print(li)

'''输出结果如下:
['egon', '女神', 'taibai', '当当']
'''

赋值

li = ['alex', 'wusir', 'egon', '女神', 'taibai', '当当']
li[0] = '男神'
print(li)
li[0] = [1,2,3]
print(li)
# 将从0开始的前两个拿出来,然后迭代添加进去
li[0:2] = '阿里巴巴'
print(li)
li[0,4] = [123,'春哥', 'dddd']
print(li)

'''输出结果如下:
['男神', 'wusir', 'egon', '女神', 'taibai', '当当']
[[1, 2, 3], 'wusir', 'egon', '女神', 'taibai', '当当']
['阿', '里', '巴', '巴', 'egon', '女神', 'taibai', '当当']
[123, '春哥', 'dddd', 'egon', '女神', 'taibai', '当当']
'''

查询

for i in li:
    print(i)
print(li[0:2])

公共方法:

  • len:测量长度
len(li)
  • count:统计出现的次数
li = ['阿', '里', '巴', '巴', 'egon', '女神', 'taibai', '巴巴']
li.count('巴')
  • index:返回索引
li = ['阿', '里', '巴', '巴', 'egon', '女神', 'taibai', '巴巴']
# 返回第一次出现的索引
li.index('巴')
  • sort:排序
# 正向排序
li.sort()
# 反向排序
li.sort(reverse=True)
  • reverse:反转
li = [123, '春哥', 'dddd', 'egon', '女神', 'taibai', '当当']
li.reverse()
# reverse反转的是自身
print(li)
'''输出结果如下:
['当当', 'taibai', '女神', 'egon', 'dddd', '春哥', 123]
'''

列表嵌套:

li = ['taibai', '武藤兰', '苑昊', ['alex','egon',89],23]
# 打印一个“藤”
print(li[1][1])

# 将‘taibai’改为‘Taibai’,即首字母大写
name = li[0].capitalize()
li[0] = name
print(li)

2 元组操作

  • 元组:
    • 只读列表
    • 可循环查询,可切片
    • 儿子不能改,孙子可能可以改
tu = (1, 2, 3, 'alex', [2, 3, 4, 'taibai'], 'egon')
# 找到alex
print(tu[3])
# 分片
print(tu[0:4])
# 循环
for i in tu:
    print(i)
# 将taibai 改成 TAIBAI
tu[4][3] = tu[4][3].upper()
print(tu)
# 添加一个元素‘sb’
tu[4].append('sb')
print(tu)


# str ---》 list 用 split
# list ---》 str 用 jion
# list的元素都必须是字符串
s = 'alex'
s1 = '__'.join(s)
tu = ( 'alex', 'egon')
s2 = '__'.join(tu)
print(s1)
print(s2)

3 字典

python唯一映射数据类型

  • 数据类型:

    • 可变数据类型(不可hash):list,dict,set
    • 不可变数据类型(可hash):元组,bool, int,str
  • dict:

    • key:必须是不可变数据类型,可hash
    • value:任意数据类型
    • 优点:
      • 二分查找去查询
      • 存储大量的关系型数据
    • 特点:
      • 无序的
dic1 = {
    'name': ['大猛', '小孟'],
    'py9': [{'num':71, 'avg_age':18}],
    True:1,
    (1,2,3): 'wuyiyi',
    # 元组里面带有list也是不行的
    # (12,[1,2]): '行不行',
    2: '儿歌'
}
print(dic1)

# 删
print(dic1.pop('py9')) # 有则按键删除, 返回此键的value
print(dic1.pop('py9',"没有此建")) # 没有此建,可以设置返回值
print(dic1.popitem()) # 随机删除,有返回值 元组(里面是删除的键值)
print(dic1)

# 查
print(dic1.keys())
print(dic1.values())
print(dic1.items())

遍历的技巧:

a = 1
b = 2
# a,b 地址互换
a,b = b,a
print (a, b)
a, b = [1, 2]
print (a, b)
a, b = [1, 2], [2, 3]
print (a, b)
a, b = (1, 2)
print (a, b)

for k,v in dic1.items():
    print (k, v)

键值不报错的方式:

v1 = dic1['name']

v2 = dic1['name1'] # 报错

print(dic1.get('name1', '没有这个键'))

输入一段字符串,只将字母转成“空格”

info = input(">>>")  #fhdalf1232ddfqer12dfjal13
for i in info:
    if i.isalpha():
        info = info.replace(i," ")
l = info.split()
print(len(l))

ps:“for i in info:”在这一句的时候info已经载入for循环中了,因此循环在里面修改info的时候,也不会更改for循环的执行情况

4 作业

循环打印列表:“(1, 2, 3, 'alex', [2, 3, 4, 'taibai'], 'egon')” , 要求子列表的元素也能循环打印,即如下所示:

1, 
2, 
3, 
'alex', 
2, 
3, 
4, 
'taibai', 
'egon'

解答如下:

# 采用递归的方式迭代打印元素
def iteratorPrint(it):
    for item in it:
        if isinstance(item, Iterable) and  not isinstance(item, str):
            iteratorPrint(item)
        else:
            print(item)


iteratorPrint(tu)

5 小结

5.1 = 、==、 is

  • =:赋值
image-20191027133417887.png
  • ==:比较值是否相等

  • is:比较的是内存地址

image-20191027133213542.png

5.2 内存地址

  • id:看内容
image-20191027133311061.png
  • 数字,字符串:小数据池

    • 数字的范围:-5 ~256

      image-20191027191722923.png
  • 字符串的范围:

    • 不能有特殊字符
    image-20191027192208524.png
  • 剩下的list、tuple、dict、set都不没有小数据池的概念

5.3 编码说明

  • 编码:

    • ascii:
      • 只能有英文
      • 一个字节表示(8位)
    • unicode:
      • A:32位 四个字节
      • 中:32位 四个字节
    • utf-8:
      • A: 8位 一个字节
      • 中: 24位 三个字节
    • gbk:
      • A: 8位 一个字节
      • 中:16位 两个字节
    • 注意事项:
      • 各个编码之间的二进制,是不能互相识别的,会产生乱码;
      • 文件的存储,传输,不能是unicode(只能是utf-8 、 utf-16、gbk、ascii等),只是用于转换
  • python3

    • str 在内存中用的是unicode存储的,
      • bytes类型
    image-20191027212151079.png
  • 对于英文

    • str:
      • 表现形式: s = 'alex'
      • 编码方式 010101010 unicode
    • bytes
      • 表现形式: s1 = b'alex'
      • 编码方式: 000101010 utf-8 gbk 。。。
  • 对于中文:

    • str:
      • 表现形式:s = '中国'
      • 编码方式:0101010 unicode
    • bytes:
      • 表现形式: s = b'x\e91\e91\e01\e21\e32'
      • 编码方式:000101010 ut-8 gbk 。。。
  • encode编码, 如何将str --> bytes,而且可以设置编码方式

s1 = 'alex'
s11 = s1.encode('utf-8')
print(s11)
s2 = '中国'
# utf-8 是三个字节表示一个汉字
s21 = s2.encode('utf-8')
print(s21)
# gbk 是两个字节表示一个汉字
s22 = s2.encode('gbk')
print(s22)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容