python第八课 元组与字典

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_19175749/article/details/79979900

元组

Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。

>>> aTuple = ('et',77,99.9)

>>> aTuple

('et',77,99.9)

<1>访问元组

 

<2>修改元组

 

 

说明: python中不允许修改元组的数据,包括不能删除其中的元素。

<3>元组的内置函数count, index

index和count与字符串和列表中的用法相同

>>> a = ('a', 'b', 'c', 'a', 'b')

>>> a.index('a', 1, 3) # 注意是左闭右开区间

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ValueError: tuple.index(x): x not in tuple

>>> a.index('a', 1, 4)

3

>>> a.count('b')

2

>>> a.count('d')

0

 

 

字典介绍

想一想:

如果有列表

     nameList = ['xiaoZhang', 'xiaoWang', 'xiaoLi'];

需要对"xiaoWang"这个名字写错了,通过代码修改:

     nameList[1] = 'xiaoxiaoWang'

如果列表的顺序发生了变化,如下

     nameList = ['xiaoWang', 'xiaoZhang',  'xiaoLi'];

此时就需要修改下标,才能完成名字的修改

     nameList[0] = 'xiaoxiaoWang'

有没有方法,既能存储多个数据,还能在访问元素的很方便就能够定位到需要的那个元素呢?

答:

字典

另一个场景:

学生信息列表,每个学生信息包括学号、姓名、年龄等,如何从中找到某个学生的信息?

>>> studens = [[1001, "王宝强", 24], [1002, "马蓉", 23], [1005, "宋喆"24], ...]

循环遍历? No!

<1>生活中的字典

 

<2>软件开发中的字典

变量info为字典类型:

 

    info = {'name':'班长', 'id':100, 'sex':'f', 'address':'地球亚洲中国北京'}

说明:

字典和列表一样,也能够存储多个数据

列表中找某个元素时,是根据下标进行的

字典中找某个元素时,是根据'名字'(就是冒号:前面的那个值,例如上面代码中的'name'、'id'、'sex')

字典的每个元素由2部分组成,键:值。例如 'name':'班长' ,'name'为键,'班长'为值

<3>根据键访问值

    info = {'name':'班长', 'id':100, 'sex':'f', 'address':'地球亚洲中国北京'}

 

    print(info['name'])

    print(info['address'])

结果:

    班长

    地球亚洲中国北京

若访问不存在的键,则会报错:

>>> info['age']

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

KeyError: 'age'

在我们不确定字典中是否存在某个键而又想获取其值时,可以使用get方法,还可以设置默认值:

>>> age = info.get('age')

>>> age #'age'键不存在,所以age为None

>>> type(age)

<type 'NoneType'>

>>> age = info.get('age', 18) # 若info中不存在'age'这个键,就返回默认值18>>> age18

字典的常见操作1

<1>修改元素

字典的每个元素中的数据是可以修改的,只要通过key找到,即可修改

demo:

    info = {'name':'班长', 'id':100, 'sex':'f', 'address':'地球亚洲中国北京'}

 

    newId = input('请输入新的学号')

 

    info['id'] = int(newId)

 

    print('修改之后的id为%d:'%info['id'])

结果:

 

<2>添加元素

demo:访问不存在的元素

    info = {'name':'班长', 'sex':'f', 'address':'地球亚洲中国北京'}

 

    print('id为:%d'%info['id'])

结果:

 

如果在使用 变量名['键'] = 数据 时,这个“键”在字典中,不存在,那么就会新增这个元素

demo:添加新的元素

    info = {'name':'班长', 'sex':'f', 'address':'地球亚洲中国北京'}

 

    # print('id为:%d'%info['id'])#程序会终端运行,因为访问了不存在的键

 

    newId = input('请输入新的学号')

 

    info['id'] = newId

 

    print('添加之后的id为:%d'%info['id'])

结果:

    请输入新的学号188

    添加之后的id为: 188

<3>删除元素

对字典进行删除操作,有一下几种:

del

clear()

demo:del删除指定的元素

 

    info = {'name':'班长', 'sex':'f', 'address':'地球亚洲中国北京'}

 

    print('删除前,%s'%info['name'])

 

    del info['name']

 

    print('删除后,%s'%info['name'])

结果为:

 

demo:del删除整个字典

 

    info = {'name':'monitor', 'sex':'f', 'address':'China'}

 

    print('删除前,%s'%info)

 

    del info

 

    print('删除后,%s'%info)

结果

 

demo:clear清空整个字典

 

    info = {'name':'monitor', 'sex':'f', 'address':'China'}

 

    print('清空前,%s'%info)

 

    info.clear()

 

    print('清空后,%s'%info)

结果

 

字典的常见操作2

<1>len()

测量字典中,键值对的个数

 

<2>keys

返回一个包含字典所有KEY的列表

<3>values

返回一个包含字典所有value的列表

 

<4>items

返回一个包含所有(键,值)元祖的列表

 

<5>has_key  python3已经删除此办法)

dict.has_key(key)如果key在字典中,返回True,否则返回False

 

若python3 想使用此办法 可以用 for keys in dict 代替

运行结果:

 

公共方法

运算符

运算符

Python 表达式

结果

描述

支持的数据类型

+

[1, 2] + [3, 4]

[1, 2, 3, 4]

合并

字符串、列表、元组

*

'Hi!' * 4

['Hi!', 'Hi!', 'Hi!', 'Hi!']

复制

字符串、列表、元组

in

3 in (1, 2, 3)

True

元素是否存在

字符串、列表、元组、字典

not in

4 not in (1, 2, 3)

True

元素是否不存在

字符串、列表、元组、字典

+

>>> "hello " + "itcast"'hello itcast'

>>> [1, 2] + [3, 4]

[1, 2, 3, 4]

>>> ('a', 'b') + ('c', 'd')

('a', 'b', 'c', 'd')

*

>>> 'ab'*4'ababab'

>>> [1, 2]*4

[1, 2, 1, 2, 1, 2, 1, 2]

>>> ('a', 'b')*4

('a', 'b', 'a', 'b', 'a', 'b', 'a', 'b')

in

>>> 'itc' in 'hello itcast'

True

>>> 3 in [1, 2]

False

>>> 4 in (1, 2, 3, 4)

True

>>> "name" in {"name":"Delron", "age":24}

True

注意,in在对字典操作时,判断的是字典的键

python内置函数

Python包含了以下内置函数

序号

方法

描述

1

cmp(item1, item2)

比较两个值

2

len(item)

计算容器中元素个数

3

max(item)

返回容器中元素最大值

4

min(item)

返回容器中元素最小值

5

del(item)

删除变量

cmp

>>> cmp("hello", "itcast")

-1

>>> cmp("itcast", "hello")

1

>>> cmp("itcast", "itcast")

0

>>> cmp([1, 2], [3, 4])

-1

>>> cmp([1, 2], [1, 1])

1

>>> cmp([1, 2], [1, 2, 3])

-1

>>> cmp({"a":1}, {"b":1})

-1

>>> cmp({"a":2}, {"a":1})

1

>>> cmp({"a":2}, {"a":2, "b":1})

-1

注意:cmp在比较字典数据时,先比较键,再比较值。

len

>>> len("hello itcast")

12

>>> len([1, 2, 3, 4])

4

>>> len((3,4))

2

>>> len({"a":1, "b":2})

2

注意:len在操作字典数据时,返回的是键值对个数。

max

>>> max("hello itcast")

't'

>>> max([1,4,522,3,4])

522

>>> max({"a":1, "b":2})

'b'

>>> max({"a":10, "b":2})

'b'

>>> max({"c":10, "b":2})

'c'

del

del有两种用法,一种是del加空格,另一种是del()

>>> a = 1

>>> a1

>>> del a

>>> a

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

NameError: name 'a' is not defined

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

>>> del a[0]

>>> a

['b']

>>> del(a)

>>> a

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

NameError: name 'a' is not defined

多维列表/元祖访问的示例

>>> tuple1 = [(2,3),(4,5)]

>>> tuple1[0]

(2, 3)

>>> tuple1[0][0]

2

>>> tuple1[0][2]

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

IndexError: tuple index out of range

>>> tuple1[0][1]

3

>>> tuple1[2][2]

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

IndexError: list index out of range

>>> tuple2 = tuple1+[(3)]

>>> tuple2

[(2, 3), (4, 5), 3]

>>> tuple2[2]

3

>>> tuple2[2][0]

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: 'int' object is not subscriptable

 

引用

想一想

>>> a = 1

>>> b = a

>>> b

1

>>> a = 2

>>> a

2

请问此时b的值为多少?

>>> a = [1, 2]

>>> b = a

>>> b

[1, 2]

>>> a.append(3)

>>> a

[1, 2, 3]

请问此时b的值又是多少?

引用

python中,值是靠引用来传递来的。

我们可以用id()来判断两个变量是否为同一个值的引用。 我们可以将id值理解为那块内存的地址标示。

>>> a = 1

>>> b = a

>>> id(a) 13033816

>>> id(b)   # 注意两个变量的id值相同13033816>>> a = 2>>> id(a)   # 注意a的id值已经变了13033792

>>> id(b)   # b的id值依旧13033816

>>> a = [1, 2]

>>> b = a

>>> id(a)139935018544808

>>> id(b)139935018544808

>>> a.append(3)

>>> a

[1, 2, 3]

>>> id(a)139935018544808

>>> id(b)       # 注意a与b始终指向同一个地址139935018544808

 

可变类型与不可变类型

可变类型,值可以改变:

列表 list

字典 dict

不可变类型,值不可以改变:

数值类型 int, long, bool, float

字符串 str

元组 tuple

怎样交换两个变量的值?

作业

1. 编程实现对一个元素全为数字的列表,求最大值、最小值

2. 编写程序,完成以下要求:

统计字符串中,各个字符的个数

比如:"hello world" 字符串统计的结果为: h:1 e:1 l:3 o:2 d:1 r:1 w:1

3. 编写程序,完成以下要求:

完成一个路径的组装

先提示用户多次输入路径,最后显示一个完成的路径,比如/home/python/ftp/share

4. 编写程序,完成“名片管理器”项目

需要完成的基本功能:

1添加名片

2删除名片

3修改名片

4查询名片

5退出系统

程序运行后,除非选择退出系统,否则重复执行功能

猜你喜欢

转载自blog.csdn.net/qq_19175749/article/details/79979900