使用dict和set

Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。--廖雪峰老师

举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list:

names = ['xiaoai','海蓝','panden']

scores = [94,97,95]

[root@VM_0_6_centos py]# python3

Python 3.6.1 (default, Dec 27 2017, 09:10:39)

[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> d = {'xiaoai':95,'zhang':99,'zhou':88}

>>> d['xiaoai']

95

>>> d['xiaoai'] = 99 #多次对一个key放入value,后面的值会把前面的值冲掉

>>> d['xiaoai']

99

>>> d['jiang'] = 99 #添加key与values

>>> d['jiang']

99

>>> 'xiaoai' in d

True

>>> 'jiang' in d #判断key是否存在

True

>>> 'li' in d #key不存在

False

>>> d['xiaoai']

99

>>> d['jiang']

99

>>> d.get('xiaoai') #d.get()判断

99

>>> d.get('linux') #交互环境不显示结果,None

>>> d.get('linux',-20) #可自定义报错的value

-20

>>> d.get('xiaoai',-20)

99

>>> d.pop('jiang')

99

>>> d

{'xiaoai': 99, 'zhang': 99, 'zhou': 88}

>>> d.pop('xiaoai') #pop(key)删除key

99

>>> d

{'zhang': 99, 'zhou': 88}

>>> d['lise'] = 87

>>> d['lise'] = 92 #添加key

>>> d

{'zhang': 99, 'zhou': 88, 'lise': 92}

>>> key = [1,2,3] #不可变key演示。

>>> d[key] = 'a list'

Traceback (most recent call last):

File "", line 1, in

TypeError: unhashable type: 'list'

>>>

[root@VM_0_6_centos py]# python3

Python 3.6.1 (default, Dec 27 2017, 09:10:39)

[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> key=[1,2,3]

>>> d[key]='a list'

Traceback (most recent call last):

File "", line 1, in

NameError: name 'd' is not defined

>>> s = set([1,2,3])

>>> s

>>> s = set([1,2,3,7,3,4,99,32,32,32,2,22])#在set中,没有重复的key。

>>> s

>>> s.add(34) #添加元素到set

>>> s

>>> s.add(33)

>>> s

>>> s.add(2)

>>> s.add(2)

>>> s.add(2)

>>> s.add(2)

>>> s.add(2)#重复添加元素无效

>>> s

>>> d.remove(2)

Traceback (most recent call last):

File "", line 1, in

NameError: name 'd' is not defined

>>> s.remove(2) #从set中删除元素

>>> s

>>> s1 =set([1,2,3])

>>> s2 = set([2,3,4,5])

>>> s1 & s2 #交集

>>> s1 s2 #并集

>>> a = ['xiaoai','jiang','li']

>>> a.sort()

>>> a

['jiang', 'li', 'xiaoai']

>>> a = ['xiaoai','jiang','li']

>>> a.sort() #排序吗

>>> a

['jiang', 'li', 'xiaoai']

>>> a = ['a','b','c']

>>> a.sort()

>>> a

['a', 'b', 'c']

>>> a = ['c','b','a']

>>> a.sort

>>> a.sort()

>>> a

['a', 'b', 'c']

>>>

下面这个replace()没弄懂,暂时先放放

而对于不可变对象,比如str,对str进行操作呢:

>>> a = 'abc'

>>> a.replace('a', 'A')

'Abc'

>>> a

'abc'

虽然字符串有个replace()方法,也确实变出了'Abc',但变量a最后仍是'abc',应该怎么理解呢?

我们先把代码改成下面这样:

>>> a = 'abc'

>>> b = a.replace('a', 'A')

>>> b

'Abc'

>>> a

'abc'

要始终牢记的是,a是变量,而'abc'才是字符串对象!有些时候,我们经常说,对象a的内容是'abc',但其实是指,a本身是一个变量,它指向的对象的内容才是'abc':

┌───┐ ┌───────┐

│ a │─────────────────>│ 'abc' │

└───┘ └───────┘

当我们调用a.replace('a', 'A')时,实际上调用方法replace是作用在字符串对象'abc'上的,而这个方法虽然名字叫replace,但却没有改变字符串'abc'的内容。相反,replace方法创建了一个新字符串'Abc'并返回,如果我们用变量b指向该新字符串,就容易理解了,变量a仍指向原有的字符串'abc',但变量b却指向新字符串'Abc'了:

┌───┐ ┌───────┐

│ a │─────────────────>│ 'abc' │

└───┘ └───────┘

┌───┐ ┌───────┐

│ b │─────────────────>│ 'Abc' │

└───┘ └───────┘

所以,对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

本文来自企鹅号 - 还是遇上了你媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏刘望舒

kotlin到底好在哪里?

最近在学kotlin,虽然还没有像其他博主一样立马就爱上它.但是不得不说,kotlin对比起java还是有不少优势的. 1、语法简洁 首先是语法比较简洁,能不简...

3577
来自专栏程序员互动联盟

【高级编程】C++中vector使用详解

1. 在C++中的详细说明 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。 vector之所以被认为...

40211
来自专栏AndroidTv

学点Groovy来理解build.gradle代码

在写这篇博客时,搜索参考了很多资料,网上对于 Groovy 介绍的博客已经特别多了,所以也就没准备再详细的去介绍 Groovy,本来也就计划写一些自己认为较重要...

4118
来自专栏Zephery

2017-03-14学习笔记

1.Integer和int,装箱拆箱 1、基本型和基本型封装型进行“==”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,因此Integer(0)...

35714
来自专栏xx_Cc的学习总结专栏

iOS底层原理总结 - 探寻block的本质(二)

3024
来自专栏余林丰

多个构造器参数使用构建器

标题一眼看过去可能不是很明白要讲什么,先来看看下面一段代码。 1 package example; 2 3 /** 4 * 重叠构造器 5 * ...

2008
来自专栏微信公众号:Java团长

Java编程思想重点笔记(Java开发必看)

Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项...

1963
来自专栏青玉伏案

窥探Swift之需要注意的基本运算符和高级运算符

  之前更新了一段时间有关Swift语言的博客,连续更新了有6、7篇的样子。期间间更新了一些iOS开发中SQLite、CollectionViewControl...

2015
来自专栏Zephery

2017-03-10学习笔记

1.Integer和int,装箱拆箱 1、基本型和基本型封装型进行“==”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,因此Integer(0)...

3748
来自专栏owent

VC和GCC成员函数指针实现的研究(二)

调用的时候主要看(c.*vptr2)()的代码。因为(c.vptr1)()生成的和单继承一样。而由于它们最终都转向vcall,所以vptr2的时候调整了虚表指针...

972

扫码关注云+社区

领取腾讯云代金券