python学习(有始有终)第2章 列表、元组、字典和集合

第2章

2.1 列表和元组(python除字符串外的另外两种序列结构)

  • 列表内元素可变,元组内元素不可变

2.1.1 列表

  • 使用[]或list()创建列表
    • 允许出现相同元素
    • 列表由1个或者多个元素组成
    • 适合利用顺序和位置定位某一元素
list1 = []
list1 = ['monday','huang','1','1','铭']
empty_list = list() #创建空列表
  • 使用list()将其他数据类型转换成列表
    • 字符串转换为由单个字母组成的列表
    >>>list('cat')
    ['c','a','t']
    
    • 元组转换为列表
    >>>a_tuple = ('huang','jian','ming')
    >>>list(a_tuple)
    ['huang','jian','ming']
    
  • 指定范围并使用切片提取元素
    • 切片提取
    >>>marxes = ['huang','jian','ming']
    >>>marxes[0:2]
    ['huang','jian']
    >>>marxes[::2]
    ['huang','ming']
    >>>marxes[::-2]
    ['ming','huang']
    #巧妙实现列表逆序
    >>>marxes[::-1]
    ['ming','jian','huang']
    
  • 列表操作
    • list.append()添加元素至尾部
    a_list.append('a_str')
    
    • list.extend()或+=合并列表
    list1.extend(list2)
    list1 += list2
    
    • list.insert()在指定位置插入元素
    #insert()可在列表任意指定位置插入元素,其中若偏移量超过了尾部,则会默认插入到列表最后
    >>>a_list = ['huang','jian','ming']
    >>>a_list.insert(1,'huang')
    ['huang','huang','jian','ming']
    
    • del删除指定位置的元素
    >>>del a_list[-3]
    ['huang','jian','ming']
    
    • list.remove()删除具有指定值的元素
    a_list.remove('huang')
    
    • list.pop()获取并删除指定位置的元素
    #pop(0)返回列表头元素并删除,pop()或pop(-1)返回列表尾元素并删除
    >>>a_list.pop(1)
    'ming'
    >>>a_list
    ['jian']
    
    • list.index()查询具有特定值的元素位置
    >>>a_list.index('huang')
    0
    
    • 使用 in 判断值是否存在
    >>>'huang' in a_list
    True
    #同一个值可能出现在列表多个位置,但至少出现一次,in就会返回True
    
    • list.count()记录特定值出现的次数
    >>>a_list = ['huang','huang','jian','ming']
    >>>a_list.count('huang')
    2
    
    • 重新排列元素
      • list.sort(reverse=True/False)会对原列表进行排序,改变原列表内容
      • 通用函数sorted()则会返回排好序的列表副本,原列表内容不变
      • 数字元素会默认地被排成从小到大的升序,字符串则会按照字母表顺序排序(可通过reverse=True/False转换)
    • list2 = list1.copy()复制
      • 使用=赋值和list.copy()不同,赋值后改变会影响原列表,复制则不会

2.1.2 元组(tuple元组不可变,一旦被定义就无法在进行增删改查等操作)

  • 用()创建元组
#空元组
>>>empty_tuple = ()
()
>>>one_tuple = 'huang',
('huang',)
>>>marx_tuple = 'huang','jian'
('huang','jian')
  • 元组解包
>>>a_tuple = 'huang','jian','ming' >>>a,b,c = a_tuple
>>>a
'huang'
>>>b
'jian'
>>>c
'ming'

2.1.3 字典(dict)

  • 与列表类似,但其中元素的顺序无关紧要,通过键值对的键(key)访问
  • 键(key)可以是字符串和python中其他任意不可变类型(布尔型、整形、浮点型、元组、字符串等)
  • 创建字典
#空字典
>>>empty_dict = {
    
    }
>>>a_dict = {
    
    'name':'hjm','age':24}
#用dict()将包含双值子序列的序列转换成字典
>>>lol = [['name','hjm'],['age','24']]
>>>dict(lol)
{
    
    'name':'hjm','age':'24'}
#包含双值元组的列表
>>>lot = [('a','b'),('c','d')]
>>>dict(lot)
{
    
    'a':'b','c':'d'}
#包含双值列表的元组
>>>tol = (['name','hjm'],['age','24'])
>>>dict(tol)
{
    
    'name':'hjm','age':'24'}
#双字符的字符串组成的列表
>>>los = ['ab','cd','ef']
>>>dict(los)
{
    
    'a':'b','c':'d','e':'f'}
  • 使用[key]添加或修改元素
#若字典中没有对应的key,则向字典中添加该键值对
>>>a_dict = {
    
    'name':'hjm'}
>>>a_dict['age'] = '24'
{
    
    'name':'hjm','age':'24'}
  • 用dict1.update(dict2)合并字典
>>>pythons = {
    
    
    'name1':'h1',
    'name2':'h2',
    'name3':'h3'
}
>>>others = {
    
    
    'age1':'m1',
    'age2':'m2'
    'name1':'m1'
}
>>>pythons.update(others)
>>>pythons
# 注意此处相同的键,对应的值会覆盖掉pyhtons中对应的值
{
    
    'name1':'m1','name2':'h2','name3':'h3','age1':'m1','age2':'m2'}
  • del删除指定键的元素
>>>del pythons['age2']
{
    
    'name1':'m1','name2':'h2','name3':'h3','age1':'m1'}
  • dict.clear()清除所有元素
  • 使用 in 判断某个键是否存在一个字典中
>>>'name' in a_dict  
True/False
  • 用dict.keys()获取所有键
>>>customers = {
    
    'h':12,'j':23,'m':45}
>>>customers.keys()
dict_keys(['h','j','m'])
>>>list(customers.keys())  
['h','j','m']
  • 用dict.values()获取所有值
>>>customers.values()
dict_values([12, 23, 45])
  • 用dict.items()获取所有键值对
>>>customers.items()  
dict_items([('h', 12), ('j', 23), ('m', 45)])
  • 同样使用=赋值,修改会影响原字典,使用dict.copy()不会影响原字典

2.1.4 集合

  • 使用set()创建集合
#创建空集
>>>empty_set = set()  
set() #空集,{}表示空字典
>>>a_set = {
    
    0,2,4,6,8}
{
    
    0,4,2,6,8}
#与字典的键一样,集合是无序的
  • 用set()将其他类型转换为集合
#重复的值将被丢弃
#包含重复字母的字符串
>>>set('letters')
{
    
    'l','e','t','r','s'}
#转换列表为集合  
>>>set(['huang','jian','ming'])  
{
    
    'huang','jian','ming'}  
#元组转换为集合
>>>set(('huang','jian','ming'))  
{
    
    'huang','jian','ming'}  
#当字典作为参数进行转换时,只有键会被使用
>>>set({
    
    'name':'hjm','sex':'man','stature':174})
{
    
    'name','sex','stature'}
  • 使用in测试值是否存在
>>>drinks = {
    
    
    'martini':{
    
    'vodka','vermouth'},
    'black russian':{
    
    'vodka','kahlua'},
    'white russian':{
    
    'cream','kahlua','vodka'},
    'manhattan':{
    
    'rye','vermouth','bitters'},
    'screwdriver':{
    
    'orange juice','vodka'}
}
#分别提取字典中的键和值
>>>for name,contents in drinks.items():
    if 'vodka' in contents:
        print(name)

screwdriver
martini
black russian
white russian

>>>for name,content in drinks.items():
    if 'vodka' in content and not ('vermouth' in content or 'cream' in content):
        print(name)

screwdriver
black russian
  • 常用set集合运算
    • 用&或set1.intersection(set2)获取集合的交集
    • 用|或set1.union(set2)获取集合的并集(至少出现一个集合中的元素)
    • 用-或set1.difference(set2)获取两个集合的差集(出现在第一个集合但不出现在第二个集合)
  • 非常用set集合运算
    • 用^或set1.symmetric_difference(set2)可以获得两个集合的异或集(仅在两个集合中出现一次)
    • 用<=或set1.issubset(set2)可以判断一个集合是否是另一个集合的子集(第一个集合的所有元素都出现在第二集合中)
    • 用>=或issuperset()判断是否是超集
    • 真子集用<或>判断

猜你喜欢

转载自blog.csdn.net/Han_Panda/article/details/111301382