[Python学习路线]--Python基础no.06

回顾上次所学,简单了解了在Python中有返回值、无返回值、有参、无参的函数。本节将学习的是Python中的list, tuple, dict, set这种复合的高级数据类型。

1. List

list是一个有序集合。像Array一样可以在其后加入[x]的形式来访问其第x个元素。其中x可以为负数,当其为负数时表示倒数第几个。比如 list[-1] 表示list中倒数第一个元素。

List的相关操作函数

MethodDescription
list.append(x)把一个元素添加到列表的结尾]。
list.extend(L)通过添加指定列表的所有元素来扩充列表。
list.insert(i, x)在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如 a.insert(0, x) 会插入到整个列表之前,而 a.insert(len(a), x) 相当于 a.append(x) 。
list.remove(x)删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。
list.pop([i])从列表的指定位置移除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被移除
list.clear()移除列表中的所有项。
list.index(x)返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。
list.count(x)返回 x 在列表中出现的次数。
list.sort()对列表中的元素进行排序。
list.reverse()倒排列表中的元素。
list.copy()返回列表的浅复制。
# List的使用


a = [66.66, 777, 777, 1, 131.13]
# count
print("a.count(777), a.count(66.66), a.count(2)")
print(a.count(777), a.count(66.66), a.count(2))
print(a)

# insert
print("a.insert(2, -1)")
a.insert(2, -1)
print(a)
# append
print("a.append(777)")
a.append(777)
print(a)
# index
print("a.index(777)")
print(a.index(777))
print(a)
# remove
print("a.remove(777)")
a.remove(777)
print(a)
# reverse
print("a.reverse()")
a.reverse()
print(a)
# sort
print("a.sort()")
a.sort()
print(a)
FANGQIdeMacBook-Pro:PythonStudy fangqi$ python3 ex16.py 
a.count(777), a.count(66.66), a.count(2)
2 1 0
[66.66, 777, 777, 1, 131.13]
a.insert(2, -1)
[66.66, 777, -1, 777, 1, 131.13]
a.append(777)
[66.66, 777, -1, 777, 1, 131.13, 777]
a.index(777)
1
[66.66, 777, -1, 777, 1, 131.13, 777]
a.remove(777)
[66.66, -1, 777, 1, 131.13, 777]
a.reverse()
[777, 131.13, 1, 777, -1, 66.66]
a.sort()
[-1, 1, 66.66, 131.13, 777, 777]

2. Tuple

另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。

>>> a = ('aaa', 'bbb', 'ccc')

现在,a这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,可以正常地使用a[0],a[-1],但不能赋值成另外的元素。
因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

# tuple


a = (1, 2, 3, 1)
print("a.count(1), a.count(2), a.count(4)")
print(a.count(1), a.count(2), a.count(4))
print(a)
print("a[0], a[1], a[-2]")
print(a[0], a[1], a[-2])

print("a.index(3)")
print(a.index(3))
FANGQIdeMacBook-Pro:PythonStudy fangqi$ python3 ex17.py 
a.count(1), a.count(2), a.count(4)
2 1 0
(1, 2, 3, 1)
a[0], a[1], a[-2]
1 2 3
a.index(3)
2

同List相比tuple的区别

  • tuple不可以修改,但可以拼接 使用+操作符
  • tuple不可以删除特定元素,但可以删除整个tuple ,使用del tuple
  • tuple 方法只有index() 和 count()

3. Dict

Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list:

names = ['Michael', 'Bob', 'Tracy']
scores = [95, 75, 85]

给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长。
如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下:

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的。假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。
第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字,无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。
dict就是第二种实现方式,给定一个名字,比如’Michael’,dict在内部就可以直接计算出Michael对应的存放成绩的“页码”,也就是95这个数字存放的内存地址,直接取出来,所以速度非常快。
你可以猜到,这种key-value存储方式,在放进去的时候,必须根据key算出value的存放位置,这样,取的时候才能根据key直接拿到value。

  • del 操作
a = {'Name': 'xiao7', 'Age': 1, 'Class': 'First'}

del a['Name']  # 删除键 'Name'
print(a)

Python中dict包含了以下内置函数:

序号函数描述
1len(dict)计算字典元素个数,即键的总数。
2str(dict)输出字典,以可打印的字符串表示。
3type(variable)返回输入的变量类型,如果变量是字典就返回字典类型。

Python中dict包含了以下内置方法:

序号函数及描述
1 radiansdict.clear()删除字典内所有元素
2 radiansdict.copy()返回一个字典的浅复制
3 radiansdict.fromkeys()创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
4 radiansdict.get(key, default=None)返回指定键的值,如果值不在字典中返回default值
5 key in dict如果键在字典dict里返回true,否则返回false
6 radiansdict.items()以列表返回可遍历的(键, 值) 元组数组
7 radiansdict.keys()返回一个迭代器,可以使用 list() 来转换为列表
8 radiansdict.setdefault和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
9 radiansdict.update(dict2)把字典dict2的键/值对更新到dict里
10 radiansdict.values()返回一个迭代器,可以使用 list() 来转换为列表
11 pop(key[,default])删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
12 popitem()随机返回并删除字典中的一对键和值(一般删除末尾对)。

4. Set

集合(set)是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

>>>basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)                      # 这里演示的是去重功能
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket                 # 快速判断元素是否在集合内
True
>>> 'crabgrass' in basket
False
 
>>> # 下面展示两个集合间的运算.
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  
{'a', 'r', 'b', 'c', 'd'}
>>> a - b                              # 集合a中包含而集合b中不包含的元素
{'r', 'd', 'b'}
>>> a | b                              # 集合a或b中包含的所有元素
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b                              # 集合a和b中都包含了的元素
{'a', 'c'}
>>> a ^ b                              # 不同时包含于a和b的元素
{'r', 'd', 'b', 'm', 'z', 'l'}

Python中set包含了如下内置函数:

序号函数描述
1add()添加元素s.add("abc")
2update()添加元素s.update(abc)
3remove()移除元素s.remove(abc) 注:如果元素不存在则报错
4discard()移除元素s.discard(abc) 注:如果元素不存在不会报错
5pop()随机删除一个元素,并且返回其值x = s.pop()
6in判断是否存在x in s,若存在返回True,不存在返回False
    原文作者:FANGQI777
    原文地址: https://www.jianshu.com/p/5c97e31d0ee3
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞