奶兔

导航

Python -- 2 语法基础(二)

目录

一、列表

  1、列表的格式

  2、列表的查找

  3、增加

  4、删除

  5、修改

  6、复制:copy() 

  7、列表的循环遍历

  8、列表嵌套

  9、应用 --  随机分配办公室

二、元组

  1、定义元组

  2、查找

三、字典

  1、创建字典

  2、增加

  3、删除

  4、修改

  5、查找

  6、字典的循环遍历

四、集合

  1、创建集合

  2、增加

  3、删除

  4、查找

可变类型与不可变类型

五、公共操作

  1、运算符

  2、公共方法

  3、容器类型转换

六、推导式

  1、列表推导式

  2、字典推导式

  3、集合推导式


一、列表

1、列表的格式

[数据1,数据2,数据3....]

列表可以一次性存储多个数据,且可以为不同的数据类型。

2、列表的查找

  • 通过下标查找
    name_list = ['Tom','Lily','Rose']
    print(name_list[0])             #Tom
    print(name_list[2])             #Rose

 

  • index():返回指定数据所在位置的下标。
  • count():统计指定数据在当前列表中出现的次数。
  • len():访问列表长度,即列表中数据的个数。
    # 列表.index(数据,开始位置下标,结束位置下标)
    print(name_list.index('Lily',0,2))    #1       返回指定数据所在位置下标,若不存在则报错
    print(name_list.count('Lily'))        #1       统计指定数据出现次数
    print(len(name_list))                 #3       访问列表长度

  • 判断是否存在
    • in:判断指定数据在某个列表序列,如果在返回True,否则返回False
    • not in:判断指定数据不在某个序列,如果不在返回True,否则返回False
    #判断数据是否存在列表中
    print('Lily' in name_list)                   #True
    print('Lily' not in name_list)               #False

3、增加

  • append():列表结尾追加数据。
  • extend():将指定的列表元素(或任何可迭代的元素)添加到当前列表的末尾。
  • insert():指定位置新增数据。
    name_list = ['Tom','Lily','Rose']

    # append()
    name_list.append('Jerry')
    print(name_list)              #['Tom', 'Lily', 'Rose', 'Jerry']
    #如果列表追加的是一个序列,则将整个序列追加到列表中。
    name_list.append(['a', 'b'])
    print(name_list)              #['Tom', 'Lily', 'Rose', 'Jerry', ['a', 'b']]

    #entend()
    name_list.extend(['c','d'])
    print(name_list)              #['Tom', 'Lily', 'Rose', 'Jerry', ['a', 'b'], 'c', 'd']

    #insert()
    # 列表.insert(位置下标,数据)
    name_list.insert(1,'xing')
    print(name_list)             #['Tom', 'xing', 'Lily', 'Rose', 'Jerry', ['a', 'b'], 'c', 'd'

列表在追加数据的时候,直接追加在原列表中,故列表是可变类型

4、删除

  • del
  • pop():删除指定下标的数据(默认为最后一个),并返回该数据。
  • remove():移除列表中某个数据的第一个匹配项。
  • chear():清空列表
    name_list = ['Tom','Lily','Rose']

    #del
    # 删除列表
    del name_list
    print(name_list)        #报错提示:NameError: name 'name_list' is not defined

    #删除列表指定数据
    del name_list[0]
    print(name_list)       #['Lily', 'Rose']


    # pop   列表.pop(下标)
    del_name = name_list.pop(1)
    print(del_name)        #Lily
    print(name_list)       #['Tom', 'Rose']

    #remove()   列表.remove(数据)
    name_list.remove('Rose')
    print(name_list)        #['Tom', 'Lily']

    #clear():清空列表
    name_list.clear()
    print(name_list)          #[]

5、修改

  • 通过下标修改
  • 逆置:reverse()
  • 排序:sort()
    name_list = ['Tom', 'Lily', 'Rose']

    #通过下标修改
    name_list[0] = 'aaa'
    print(name_list)             #['aaa', 'Lily', 'Rose']


    #reverse()   逆置
    name_list.reverse()
    print(name_list)             #['Rose', 'Lily', 'aaa']


    #sort()      排序
    #列表.sort(key=None,reverse=False)
    #reverse表示排序规则 ,True降序,False升序
    num_list = [2,4,3,6,7,9,1,5,8]
    num_list.sort()
    print(num_list)             #[1, 2, 3, 4, 5, 6, 7, 8, 9]

6、复制:copy() 

    name_list = ['Tom', 'Lily', 'Rose']
    copy_list = name_list.copy()
    print(copy_list)           #['Tom', 'Lily', 'Rose']

7、列表的循环遍历

    name_list = ['Tom', 'Lily', 'Rose']

    i = 0
    while i < len(name_list):
        print(name_list[i])
        i += 1

    print("---"*5)

    for i in name_list:
        print(i)

执行结果:

8、列表嵌套

列表嵌套是指一个列表中包含其他子列表。

name_list = [["小明","小兰","小红"],["Tom","Lily","Rose"],["张三","李四","王五"]]
name_list = [2][1]           #李四

9、应用 --  随机分配办公室

    """ 随机分配办公室 """
    offices = [[], [], []]
    teachaer = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

    for i in teachaer:
        r = random.randint(0, 2)
        offices[r].append(i)

    for office in offices:
        print("有%s个老师分别是:"%len(office))
        for i in office:
            print(i,end="  ")
        print()


二、元组

元组可以存储多个数据,元组内的数据是不能修改的,属于不可变类型。

1、定义元组

定义元组使用小括号,且逗号隔开各个数据,数据可以是不同的数据类型

2、查找

  • 按下标查找
  • index() :查找某个数据,数据存在返回对应下标,数据不存在报错  与字符串的index方法相同
  • count() :统计某个数据出现次数
  • len()     :统计元组中数据的个数
    tuple1 = ('aa','bb','cc','bb')
    
    #按下标查找
    print(tuple1[1])             #bb

    #index()
    print(tuple1.index('cc'))    #2

    #count()
    print(tuple1.count('bb'))    #2
    
    #len()
    print(len(tuple1))           #4

ps:元组内的数据直接修改报错,但是如果元组内有列表修改列表数据则支持。

    tuple2 = (10,20,['Tom','Lily'],30,40)
    tuple2[2][0] = 'aaaa'
    print(tuple2)                #(10, 20, ['aaaa', 'Lily'], 30, 40)


三、字典

字典可以进行修改,所有字典是可变类型

1、创建字典

字典的特点:

  1. 符号为大括号
  2. 数值以键值对形式出现
  3. 各键值对之间由逗号隔开
    #有数据字典
    dict1 = {'name':'Tom','age':20,'gender':''}

    #空字典
    dict2 = {}
    dict3 = dict()

冒号前面的为键(key),简称k ;冒号后面的为值(value),简称v。

2、增加

字典[key] = 值

如果key存在则修改这个key对应的值,如果key不存在则新增此键值对。

    dict1 = {'name':'Tom','age':20,'gender':''}

    dict1['name'] = 'Lily'
    print(dict1)           #{'gender': '男', 'age': 20, 'name': 'Lily'}

    dict1['id'] = 1
    print(dict1)           #{'gender': '男', 'age': 20, 'name': 'Lily', 'id': 1}

3、删除

  • del() / del :删除字典或删除字典中指定键值对。
  • chear() :清空字典
    #删除
    del dict1['gender']
    print(dict1)            #{'age': 20, 'name': 'Tom'}

    dict1.clear()
    print(dict1)            #{}

4、修改

字典[key] = 值

注:如果key存在则修改这个key对应的值;如果key不存在则新增此键值对。

5、查找

  • 通过key值查找    ,若查找的key存在,则返回对应的值,否则报错。
  • get()
  • keys()
  • values()
  • items()
    #查找
    #key值查找
    print(dict1['name'])         #Tom
    print(dict1['age'])          #20

    #get()
    #字典.get(key,默认值)
    print(dict1.get('name'))     #Tom
    print(dict1.get('id',100))   #100   当前查找key不存在则第二个参数(默认值)
    print(dict1.get('id'))       #None  如果省略第二个参数,则返回None

    #keys()
    print(dict1.keys())          #dict_keys(['age', 'gender', 'name'])

    #values()
    print(dict1.values())        #dict_values([20, '男', 'Tom'])

    #items()
    print(dict1.items())         #dict_items([('age', 20), ('gender', '男'), ('name', 'Tom')])

6、字典的循环遍历

    dict1 = {'name':'Tom','age':20,'gender':''}

    # 遍历字典的key
    print("----遍历字典的key----")
    for key in dict1.keys():
        print(key)

    # 遍历字典的value
    print("----遍历字典的value----")
    for value in dict1.values():
        print(value)

    # 遍历字典的元素
    print("----遍历字典的元素----")
    for item in dict1.items():
        print(item)

    # 遍历字典的键值对
    print("----遍历字典的键值对----")
    for key,value in dict1.items():
        print("%s = %s" %(key,value))

执行结果:


 

四、集合

1、创建集合

创建集合使用 { } 或者set( ) , 但是如果要创建空集合只能使用set(),因为{ }用户创建字典。

    s1 = {1,2,3,4,5,4}
    print(s1)         #{1, 2, 3, 4, 5}

    s2 = set()
    print(type(s2))   #<class 'set'>

    s3 = {}
    print(type(s3))   #<class 'dict'>

集合的特点:

  1. 集合可以去掉重复数据;
  2. 集合数据是无序的,故不支持下标

2、增加

  • add()
  • update():追加的数据为序列
    s1 = {10,20,30}

    #增加
    #add()
    s1.add(40)
    s1.add(10)
    print(s1)         #{40, 10, 20, 30}

    #update()
    s1.update([100,200])
    s1.update('abcd')
    print(s1)         #{100, 40, 200, 10, 'a', 'b', 'c', 'd', 20, 30}

集合有去重功能,所有当向集合追加数据是当前集合已有数据的话,则不进行任何操作。

3、删除

  • remove():删除集合中的指定数据,如果数据不存在则报错。
  • discard():删除集合中的指定数据,如果数据不存在也不会报错。
  • pop():随机删除集合中的某个数据,并返回这个数据。
    #删除
    #remove()
    s1.remove(10)
    print(s1)            #{40, 50, 20, 60, 30}

    s1.remove(10)
    print(s1)            #报错:KeyError: 10

    #discard()
    s1.discard(30)
    print(s1)              #{40, 50, 20, 60}

    s1.discard(30)
    print(s1)              #{40, 50, 20, 60}

    #pop()
    del_num = s1.pop()
    print("s1:%s"%s1)               #s1:{50, 20, 60}
    print("del_num:%s"%del_num)     #del_num:40

4、查找

  • in:判断数据在集合中
  • not in:判断数据不在集合中
    s1 = {10, 20, 30, 40, 50, 60}

    print(10 in s1)             #True
    print(10 not in s1)         #False


 

可变类型与不可变类型

可变数据类型:list(列表)、dict(字典)、set(集合)

不可变数据类型:数值类型、string(字符串)、tuple(元组)


 

五、公共操作

1、运算符

运算符 描述 支持容器类型
+ 合并 字符串、列表、元组
* 复制 字符串、列表、元组
in 元素是否存在 字符串、列表、元组、字典

not in

元素是否不存在 字符串、列表、元组、字典
  • +
    # +
    #字符串
    str1 = 'aa'
    str2 = 'bb'
    print(str1 + str2)            #aabb

    #列表
    list1 = [1,2]
    list2 = [10,20]
    print(list1 + list2)          #[1, 2, 10, 20]

    #元组
    set1 = (1,2)
    set2 = (10,20)
    print(set1 + set2)            #[1, 2, 10, 20]

  •  *
    #*
    #字符串
    print("-" * 10)          # ----------

    #列表
    list1 = ['Hello']
    print(list1 * 5)         #['Hello', 'Hello', 'Hello', 'Hello', 'Hello']

    #元组
    set1 = ['Python']
    print(set1 * 5)          #['Python', 'Python', 'Python', 'Python', 'Python']

  • in   、  not in
    # in 、 not in
    #字符串
    str1 = "abcd"
    print('a' in str1)             #True
    print('a' not in str1)         #False 

    #列表
    list1 = ['a','b','c','d']
    print('a' in list1)            #True
    print('a' not in list1)        #False 

    #元组
    set1 = ('a','b','c','d')
    print('a' in set1)             #True
    print('a' not in set1)         #False 

    #字典
    dict1 = {'a':1 , 'b':2 ,'c':3}
    print('a' in dict1)            #True
    print('a' not in dict1)        #False 

2、公共方法

函数 描述
len() 计算容器中元素个数
del 或者 del() 删除
max() 返回容器中元素最大值
min() 返回容器中元素最小值
range(start , end , step) 生成从start到end的数字,步长为step,供for循环只用
enumerate() 函数用于将一个可遍历的数据对象(如:列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用于for循环
  • enumerate(可遍历对象,srart=0)

注:start参数用来设置遍历数据下标起始值,默认为0

    list1 = ['a','b','c','d','e','f']

    for i in enumerate(list1):
        print(i)

    for index,i in enumerate(list1,start=2):
        print("下标为:%s ,对应字符为:%s"%(index,i))

执行结果:

3、容器类型转换

  • tuple():将某个序列转换为元组
  • list():将某个序列转换为列表
  • set():将某个序列转换为集合 (集合可以快速完成去重,集合不支持下标)

 


六、推导式

1、列表推导式

[xx for xx in range()]

    # 需求:创建一个0-10的列表

    #for循环实现
    list1 = []
    for i in range(11):
        list1.append(i)
    print(list1)

    #列表推导式
    list1 = [i for i in range(11)]
    print(list1)    
    

    # 需求:创建一个0-10的偶数列表
    list1 = [i for i in range(0,11,2)]
    print(list1)

    list2 = [i for i in range(11) if i % 2 ==0]
    print(list2)

    #多个for循环实现列表推导式
    #创建[(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]
    list1 = [(i,j) for i in range(1,3) for j in range(3) ]
    print(list1)

2、字典推导式

[xx1:xx2 for ... in ...]

    #需求:字典key为1-5数字,value是这个数字的2次方
    dict1 = {i:i**2 for i in range(1,6)}
    print(dict1)

    #需求:两个列表合并为一个字典
    list1 = ['name','age','gender']
    list2 = ['Tom',10,'']

    dict1 = {list1[i]:list2[i] for i in range(len(list1))}
    print(dict1)

    #需求:提取字典中的大于100的数据
    counts = {'MBP':268,'HP':123,'DELL':201,'Lenovo':199,'acer':99}

    count1 = {key:value for key,value in counts.items() if value>=200}
    print(count1)

3、集合推导式

[xx for xx in ...]

    # 创建一个集合,数据为下方列表的2次方
    list1 = [1,1,2]
    set1 = {i**2 for i in list1}
    print(set1)          #{1, 4}

 

 

posted on 2021-05-08 09:03  奶兔  阅读(85)  评论(0编辑  收藏  举报