列表
列表是非常容易更改的,可以直接对原始列表进行修改:添加新元素、删除或覆盖已有元素。列表中的元素可以出现多次。
使用[]或list()创建列表
列表由0或多个元素组成,元素之间用逗号分开,整个列表被[]包裹。
>>> empty_list = [] // 创建空列表
>>> big_birds = ['emu','ostrich','cassowary'] //创建一个包含3个元素的列表
>>> another_empty_list = list() // 创建空列表
使用[list()将其他数据类型转换为列表
>>> list('cat')
['c', 'a', 't']
也可以使用split()分割字符串生成列表
>>> birthday = '1/6/1952'
>>> birthday.split('/')
['1', '6', '1952']
如果字符串中有连续的分隔符,则会返回空串元素
>>> splitme = 'a/b//c/d///e'
>>> splitme.split('/')
['a', 'b', '', 'c', 'd', '', '', 'e']
将分隔符改为’//’后的结果如下
>>> splitme.split('//')
['a/b', 'c/d', '/e']
包含列表的列表
在列表中可以包含各种类型的元素,也包括其他列表
>>> all_birds = [['hummingbird','finch'],3,5,'French hens',[1,2,3]]
>>> print(all_birds)
[['hummingbird', 'finch'], 3, 5, 'French hens', [1, 2, 3]]
使用[offset]修改元素
>>> marxes = ['Groucho','Chico','Harpo']
>>> marxes[2] = 'Wanda'
>>> marxes
['Groucho', 'Chico', 'Wanda']
删除列表中的元素
删除列表中的元素有很多种方法
使用del删除指定位置的元素
>>> marxes = ['Groucho','Chico','Harpo']
>>> del marxes[1]
>>> marxes
['Groucho', 'Harpo']
使用remove()删除具有指定值的元素
>>> marxes = ['Groucho','Chico','Harpo']
>>> marxes.remove('Chico')
>>> marxes
['Groucho', 'Harpo']
使用pop()获取并删除指定位置的元素,pop()中需要一个偏移量参数,如果省略,则会返回队尾元素
>>> marxes = ['Groucho','Chico','Harpo']
>>> marxes.pop(1)
'Chico'
>>> big_birds = ['emu','ostrich','cassowary']
>>> big_birds.pop()
'cassowary'
添加元素至列表
使用append()添加元素
>>> marxes = ['Groucho','Chico','Harpo']
>>> marxes.append('Zeppo')
>>> marxes
['Groucho', 'Chico', 'Harpo', 'Zeppo']
需要注意的是append()会将要添加的元素作为一个整体添加到列表的尾部,就如同下面这样
>>> marxes = ['Groucho','Chico','Harpo']
>>> big_birds = ['emu','ostrich','cassowary']
>>> marxes.append(big_birds)
>>> marxes
['Groucho', 'Chico', 'Harpo', ['emu', 'ostrich', 'cassowary']]
使用extend()或+=合并列表
这两个操作都是将两个列表合并成一个列表,并不会出现append()那种情况
>>> marxes = ['Groucho','Chico','Harpo']
>>> big_birds = ['emu','ostrich','cassowary']
>>> marxes.extend(big_birds)
>>> marxes
['Groucho', 'Chico', 'Harpo', 'emu', 'ostrich', 'cassowary']
>>> marxes = ['Groucho','Chico','Harpo']
>>> others = ['Gummo','Karl']
>>> marxes += others
>>>> marxes
['Groucho', 'Chico', 'Harpo', 'Gummo', 'Karl']
使用insert()在指定位置插入元素
与append()类似,append()只能将元素插入到列表尾部,而insert()可以将元素插入到任意位置
>>> marxes = ['Groucho','Chico','Harpo']
>>> marxes.insert(2,'Gummo')
>>> marxes
['Groucho', 'Chico', 'Gummo', 'Harpo']
查找列表中的元素
使用index()查询具有特定值的元素位置
>>> marxes = ['Groucho','Chico','Harpo']
>>> marxes.index('Chico')
1
使用in判断值是否存在
>>> 'Chico' in marxes
True
>>> 'Bob' in marxes
False
使用count()记录特定值出现的次数
>>> marxes.count('Chico')
1
>>> marxes.count('Bob')
0
指定范围并使用切片提取元素
这个与字符串的切片使用方法一样,只不过列表的切片仍然是一个列表,也可以使用切片实现列表的逆序
>>> marxes = ['Groucho','Chico','Harpo']
>>> marxes[0:2]
['Groucho', 'Chico']
>>> marxes[::-1]
['Harpo', 'Chico', 'Groucho']
>>>
使用join()转换为字符串
join()是一个字符串方法,并不是列表方法。join()函数的参数是字符串或者是其他的包含字符串的序列。这里有两种方式使用join()
>>> marxes = ['Groucho','Chico','Harpo']
>>> ','.join(marxes)
'Groucho,Chico,Harpo'
>>> separator = ','
>>> separator.join(marxes)
'Groucho,Chico,Harpo'
使用sort()重新排列元素
列表方法sort()会对原列表进行排序,改变原列表的内容
>>> marxes = ['Groucho','Chico','Harpo']
>>> marxes.sort()
>>> marxes
['Chico', 'Groucho', 'Harpo']
通用函数sorted()则会返回排好序的列表副本,原列表内容不变
>>> sorted_marxes = sorted(marxes)
>>> sorted_marxes
['Chico', 'Groucho', 'Harpo']
>>> marxes
['Groucho', 'Chico', 'Harpo']
如果列表中的元素都是数字,它们会默认地被排列成从小到大的升序。如果元素都是字符串,则会按照字母表顺序排列。
默认的排序是升序的,通过添加参数reverse = True 可以改变为降序排序
>>> marxes.sort(reverse = True)
>>> marxes
['Harpo', 'Groucho', 'Chico']
>>> sorted_marxes = sorted(marxes,reverse = True)
>>> sorted_marxes
['Harpo', 'Groucho', 'Chico']
使用len()获取长度
>>> len(marxes)
3
使用=赋值,使用copy()复制
如果将一个列表赋值给多个变量,改变其中任何一处都会造成其他变量对应的值的改变。
>>> a = [1,2,3]
>>> b=a
>>> c=b
>>> a[0]='surprise'
>>> b
['surprise', 2, 3]
>>> c
['surprise', 2, 3]
同样的,修改b的值,a和c的值也会改变
但是通过下面几种方法复制的话就不会出现这种情况
列表copy()函数
list()转换函数
列表分片[:]
测试结果如下,a为初始列表,b用copy函数创建,c用list()函数创建,d用列表分片创建
>>> a = [1,2,3]
>>> b = a.copy()
>>> c = list(a)
>>> d = a[:]
>>> a[0] = 'surprise'
>>> a
['surprise', 2, 3]
>>> b
[1, 2, 3]
>>> c
[1, 2, 3]
>>> d
[1, 2, 3]
元组
元组与列表类似,也是由任意类型元素组成的序列。但是 元组是不可变的,一旦元组被定义,将无法再进行增加、删除或修改等操作。
创建元组
可以使用()创建一个空元组
>>> empty_tuple = ()
>>> empty_tuple
()
当创建的元组只包含一个元素时,后面的逗号不能省略,因为()也可以表示为数学公式中的小括号,从而产生错误
>>> other_tuple = (123,)
>>> other_tuple
(123,)
>>> one_tuple = (123)
>>> one_tuple
123
使用tuple()将其他类型的数据转换为元组
>>> mar = ['Croucho','Chico','Harpo']
>>> tuple(mar)
('Croucho', 'Chico', 'Harpo')
元组的操作方法
虽然元组无法改变,但可以将两个元组拼接起来创建一个新的元组
>>> tuple1 = (1,2,3)
>>> tuple2 = (4,5,6)
>>> tuple3 = tuple1 + tuple2
>>> tuple3
(1, 2, 3, 4, 5, 6)
在元组中,可以同时将元组赋值给多个变量
>>> mar = ('Croucho','Chico','Harpo')
>>> a,b,c = mar
>>> a
'Croucho'
>>> b
'Chico'
>>> c
'Harpo'
也可以用这个方法来对多个变量的值进行交换
>>> password = 'swordfish'
>>> icecream = 'tutifrutti'
>>> password,icecream = icecream,password
>>> password
'tutifrutti'
>>> icecream
'swordfish'
字典
字典中的每个元素拥有与之对应的互不相同的键,需要通过键来访问元素。键通常是字符串,也可以是其他任意的不可变类型。字典是可变的,可以增加、删除或修改其中的键值对。键与键之间不可重复
创建字典
使用{}创建字典,用{}将一系列以逗号隔开的键值对(key:value)包裹起来即可进行字典的创建。
>>> empty_dict = {}
>>> empty_dict
{}
>>> other_dict = {'a':'b','c':'d','e':'f'}
>>> other_dict
{'e': 'f', 'c': 'd', 'a': 'b'}
使用dict()转换为字典,dict()可以将包含双值子序列的序列转换成字典。
>>> lol = [['a','b'],['c','d'],['e','f']]
>>> dict(lol)
{'e': 'f', 'c': 'd', 'a': 'b'}
>>> top = ('ab','cd','ef')
>>> dict(top)
{'e': 'f', 'c': 'd', 'a': 'b'}
修改或添加字典中的元素
使用[key]修改或添加元素,如果该元素的键已存在于字典中,那么该键对应的旧值会被新值取代。如果该元素的键未在字典中出现,则会被加入字典
>>> pythons = {'Chapman':'Graham','Cleese':'John','Idle':'Eric'}
>>> pythons
{'Idle': 'Eric', 'Chapman': 'Graham', 'Cleese': 'John'}
>>> pythons['Gilliam'] = 'Gerry'
>>> pythons
{'Idle': 'Eric', 'Chapman': 'Graham', 'Cleese': 'John', 'Gilliam': 'Gerry'}
>>> pythons['Gilliam'] = 'Terry'
>>> pythons
{'Idle': 'Eric', 'Chapman': 'Graham', 'Cleese': 'John', 'Gilliam': 'Terry'}
使用update()合并字典,使用update()可以将一个字典的键值对复制到另一个字典中去
>>> pythons = {'Chapman':'Graham','Cleese':'John','Idle':'Eric'}
>>> others = {'Marx':'Groucho','Howard':'Moe'}
>>> pythons.update(others)
>>> pythons
{'Idle': 'Eric', 'Chapman': 'Graham', 'Cleese': 'John', 'Howard': 'Moe', 'Marx': 'Groucho'}
删除字典中的元素
使用del删除具有指定键的元素
>>> pythons = {'Chapman':'Graham','Cleese':'John','Idle':'Eric'}
>>> del pythons['Chapman']
>>> pythons
{'Idle': 'Eric', 'Cleese': 'John'}
使用clear()删除所有元素
>>> pythons.clear()
>>> pythons
{}
获取字典中的元素
使用in判断某一个键是否存在于字典中
>>> pythons = {'Chapman':'Graham','Cleese':'John','Idle':'Eric'}
>>> 'Jones' in pythons
False
>>> 'Chapman' in pythons
True
使用[key]获取元素
>>> pythons['Chapman']
'Graham'
使用keys()获取所有键
>>> pythons.keys()
dict_keys(['Idle', 'Chapman', 'Cleese'])
使用values()获取所有值
>>> pythons.values()
dict_values(['Eric', 'Graham', 'John'])
使用items()获取所有键值对
>>> pythons.items()
dict_items([('Idle', 'Eric'), ('Chapman', 'Graham'), ('Cleese', 'John')])
需要注意的是,你需要自己手动使用list()函数,将keys()、values()和items()的返回值转换为普通的Python列表
>>> list(pythons.keys())
['Idle', 'Chapman', 'Cleese']
>>> list(pythons.values())
['Eric', 'Graham', 'John']
>>> list(pythons.items())
[('Idle', 'Eric'), ('Chapman', 'Graham'), ('Cleese', 'John')]
使用=赋值,使用copy()复制
与列表一样,使用复制的话,对字典内容进行的修改会反映到所有与之相关联的变量名上
>>> pythons = {'Chapman':'Graham','Cleese':'John','Idle':'Eric'}
>>> others = pythons
>>> others
{'Idle': 'Eric', 'Chapman': 'Graham', 'Cleese': 'John'}
>>> pythons['Idle'] = 'Bob'
>>> pythons
{'Idle': 'Bob', 'Chapman': 'Graham', 'Cleese': 'John'}
>>> others
{'Idle': 'Bob', 'Chapman': 'Graham', 'Cleese': 'John'}
使用copy()就可以避免这种情况
>>> pythons = {'Chapman':'Graham','Cleese':'John','Idle':'Eric'}
>>> others = pythons.copy()
>>> others
{'Idle': 'Eric', 'Chapman': 'Graham', 'Cleese': 'John'}
>>> pythons['Idle'] = 'Bob'
>>> pythons
{'Idle': 'Bob', 'Chapman': 'Graham', 'Cleese': 'John'}
>>> others
{'Idle': 'Eric', 'Chapman': 'Graham', 'Cleese': 'John'}
集合
集合就如同去掉值的字典一样,键与键之间不可重复。集合中的元素不可重复
创建集合
使用set()创建集合,或使用大括号将一系列以逗号隔开的值包裹起来创建集合
>>> empty_set = set()
>>> empty_set
set()
>>> other_set = {1,2,3,4,5}
>>> other_set
{1, 2, 3, 4, 5}
使用set()将其他类型转换为集合
>>> set('letters')
{'l', 's', 't', 'r', 'e'}
>>> set(['Dasher','Dasher','Dancer','Dancer'])
{'Dancer', 'Dasher'}
这个例子就可以体现出,集合中的元素不可重复的特点
使用in测试值是否存在
这是集合最常用的功能
>>> others = {1,2,3,4,5,6}
>>> 6 in others
True
>>> 7 in others
False
合并及运算符
交集运算符 &,返回两个集合中都存在的元素。也可以使用intersection()获取两个集合的交集
>>> a = {1,2,3,4,5}
>>> b = {2,3,6,7,8}
>>> a&b
{2, 3}
>>> a.intersection(b)
{2, 3}
并集运算符 |,返回两个集合中出现的元素。也可以使用union()函数获取两个集合的并集
>>> a|b
{1, 2, 3, 4, 5, 6, 7, 8}
>>> a.union(b)
{1, 2, 3, 4, 5, 6, 7, 8}
差集运算符 -,返回两个集合的差集(出现在第一个集合,但不出现第二个集合中的元素)。也可以使用difference()函数获取两个集合的差集
>>> a-b
{1, 4, 5}
>>> a.difference(b)
{1, 4, 5}
>>> b-a
{8, 6, 7}
>>> b.difference(a)
{8, 6, 7}
异或运算符 ^,返回两个集合的异或集(仅在两个集合中出现一次)。也可以使用symmetric_difference()函数获取两个集合的异或集
>>> a^b
{1, 4, 5, 6, 7, 8}
>>> a.symmetric_difference(b)
{1, 4, 5, 6, 7, 8}
子集与超集
子集与超集正好相反,第一个集合是第二个集合的子集,那么第二个集合就是第一个集合的超集,当然,还有真子集与真超集,这个与高中所学的集合是完全一样的
使用<=或者issubset()可以判断一个集合是否是另一个集合的子集
>>> b = {1,2,3,4,5}
>>> a = {2,3,4}
>>> a <= b
True
>>> a <= a
True
>>> b.issubset(a)
False
使用>=或者issuperset()可以判断一个集合是否是另一个集合的超集
>>> a >= b
False
>>> a >= a
True
>>> a.issuperset(b)
False
判断真集只需将=号去掉即可。