04.序列的应用

  • 列表(list)

  • 元组(tuple)

  • 字典(dictionary)

  • 集合(set)

索引:

    verse = ["今有物不知其数", "三三数之剩二", "五五数之剩三", "七七数之剩二", "问几何?"]
    # 索引从0开始
    print(verse[0])  # 今有物不知其数
    # 采用负数作为索引值时,从-1开始
    print(verse[-1])  # 问几何?

切片:

    snum = ['1', '2', '3', '4', '5', '6']
    # 范围从第1个到第5个元素,步长为1,从0开始不包括5
    print(snum[1:5])  # ['2', '3', '4', '5']
    # 范围从第0个到第3个元素,步长为2,从0开始不包括第3个
    print(snum[0:6:3])  # ['1', '4']
    print(snum[0:3:3])  # ['1']
    

序列相加和乘法:

    n1 = ['a', 'b', 'c']
    n2 = ['1', '2', '3']
    n3 = ['4', '5', '6']
    n4 = [4, 5, 6]
    print(n1 + n2)  # ['a', 'b', 'c', '1', '2', '3']
    print(n1 + n3)  # ['a', 'b', 'c', '4', '5', '6']
    print(n1 + n4)  # ['a', 'b', 'c', 4, 5, 6]
    print(n1 * 3)  # ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']
    # 列表的每个元素都是None
    emptylist = [None] * 5
    print(emptylist)  # [None, None, None, None, None]

检查某个元素是否是序列的成员:

    verse = ["今有物不知其数", "三三数之剩二", "五五数之剩三", "七七数之剩二", "问几何?"]
    # 检查某个元素是否是序列的成员
    print("今有物不知其数" in verse)  # True
    print("今有物不知其" not in verse)  # True

序列的内置函数:

  num = [6, 7, 8, 24, 14, 1, 2, 100]
    print("序列的长度:", len(num))  # 序列的长度: 8
    print("序列中的最大值:", max(num))  # 序列中的最大值: 100
    print("序列中的最小值:", min(num))  # 序列中的最小值: 1
    print("序列转换为列表:", list(num), "类型是:", type(list(num)))  # 序列转换为列表: [6, 7, 8, 24, 14, 1, 2, 100] 类型是: <class 'list'>
    print("序列转换为字符串:", str(num), "类型是:", type(str(num)))  # 序列转换为字符串: [6, 7, 8, 24, 14, 1, 2, 100] 类型是: <class 'str'>
    print("序列各元素求和:", sum(num))  # 序列各元素求和: 162
    print("序列排序:", sorted(num))  # 序列排序: [1, 2, 6, 7, 8, 14, 24, 100]
    print("反向序列:", reversed(num))  # 反向序列: <list_reverseiterator object at 0x108162eb8>
    print("将序列组合为一个索引序列:", enumerate(num))  # 将序列组合为一个索引序列: <enumerate object at 0x1081c95e8>
    for i in reversed(num):
        print(i, end=' ')  # 100 2 1 14 24 8 7 6 
    print()
    for k, i in enumerate(num):
        print("索引:", i, " 值:", k, end=' ')
        # 索引: 6  值: 0 索引: 7  值: 1 索引: 8  值: 2 索引: 24  值: 3 索引: 14  值: 4 索引: 1  值: 5 索引: 2  值: 6 索引: 100  值: 7

列表:

 列表的创建于访问:

    # 创建一个空列表
    emptylist = []
    # 创建2~10之间(不包括10)所以偶数的列表
    print(list(range(2, 10, 2)))  # [2, 4, 6, 8]
    # 已经创建的列表,不再使用时,可以使用del语句将其删除
    del emptylist
    # 访问不存在的列表会报错
    # print(emptylist)  # NameError: name 'emptylist' is not defined

    mylist = ['1', 21, "aa", ["12", '21']]
    print(mylist[3])  # ['12', '21']
    print(mylist[3][1])  # 21

增删改查:

   listnum = []
    # 添加元素
    listnum.append(1)
    print(listnum)  # [1]
    listnum2 = [1, 2, 3, 4]
    # 插入0到2的位置
    listnum2.insert(2, 0)
    print(listnum2)  # [1, 2, 0, 3, 4]
    listnum3 = [100]
    # 将listnum2的内容追加到listnum3
    listnum3.extend(listnum2)
    print(listnum3)  # [100, 1, 2, 0, 3, 4]
    listnum4 = [1, 2, 3, 4]
    # 修改元素
    listnum4[2] = 33
    print(listnum4)  # [1, 2, 33, 4]
    # 根据索引删除元素,删除最后一个
    del listnum4[-1]
    print(listnum4)  # [1, 2, 33]
    # 根据元素值删除
    if listnum4.count(33) > 0:  # 判断元素是否存在
        listnum4.remove(33)
    print(listnum4)  # [1, 2]
    listnum4.remove(332)# ValueError: list.remove(x): x not in list
    

排序:

   # sort(),会改变原列表的元素排列顺序
    list1 = ['D', 'b', 'a', 'C', 'e']
    # 升序 不区分大小写
    list1.sort(key=str.lower)
    print(list1)  # ['a', 'b', 'C', 'D', 'e']
    # 降序,不区分大小写
    list1.sort(key=str.lower, reverse=True)
    print(list1)  # ['e', 'D', 'C', 'b', 'a']

    # 使用sorted()函数排序,不影响原列表
    list2 = ['D', 'b', 'a', 'C', 'e']
    print(sorted(list2, key=str.lower))  # ['a', 'b', 'C', 'D', 'e']
    print(list2)  # ['D', 'b', 'a', 'C', 'e']

列表推导式:

import random

if __name__ == '__main__':
    # 生成10个10~100的随机数
    newlist = [random.randint(10, 100) for i in range(10)]
    print(newlist)  # [93, 22, 79, 58, 21, 80, 40, 13, 38, 46]

    price = [1, 2, 3, 4, 5]
    sale = [int(x * 2) for x in price]
    print(sale)  # [2, 4, 6, 8, 10]

    # price中的元素如果  % 2 == 0 ,符合条件的就有2,4,才会执行for前面的表达式
    sale2 = [int(x * 2) for x in price if x % 2 == 0]
    print(sale2)  # [4, 8]

二维列表的创建:

    # 使用嵌套的for循环创建
    arr = []
    for i in range(4):
        arr.append([])
        for j in range(3):
            arr[i].append(j)

    print(arr)  # [[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
    # 使用列表推导式创建
    arr2 = [[j for j in range(3)] for i in range(4)]
    print(arr2)  # [[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
    print(arr2[0][0])  # 0

    verse = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    print(verse)  # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    # 逆序排列
    verse.reverse()
    print(verse)  # [[7, 8, 9], [4, 5, 6], [1, 2, 3]]

 元组:

  # 元组使用一对小括号将所有的元素括起来,但小括号并不是必须的,
    # 只要将值用逗号分隔开,就可以视其为元组
    v1 = (7, 14, 21, 28, 35, 42, 49, 56, 63)
    v2 = ("玉湖",)
    v3 = ("玉湖")
    v4 = "玉湖",
    print(type(v1))  # <class 'tuple'>
    print(type(v2))  # <class 'tuple'>
    print(type(v3))  # <class 'str'>
    print(type(v4))  # <class 'tuple'>

    # 创建空元组
    emptytuple = ()
    print(tuple(range(10, 20, 2)))  # (10, 12, 14, 16, 18)
    # 删除元祖
    del v2
    # print(v2) # NameError: name 'v2' is not defined

    # 访问元组元素
    print(v1[0])  # 7
    # 前3个元素
    print(v1[:3])  # (7, 14, 21)

    # for循环元组
    for i in v1:
        print(i, end=' ')  # 7 14 21 28 35 42 49 56 63
    print()
    co = ('a', 'b', 'c', 'd')
    # 对元组进行重新赋值
    co = ('a', 'b', 'cc', 'd')
    print(co)
    # 元组连接组合
    co = co + ('e',)
    print(co)  # ('a', 'b', 'cc', 'd', 'e')
    # tuple元组的不可变是指元素对象的引用不可变,不能对其再次赋值,但是在其中可变元素对象的引用不被修改前提下,仍旧可以对可变元素对象修改
    co2 = ([1], [2], [3])
    a = co2[0]
    a += [4]
    print(co2)  # ([1, 4], [2], [3])

元组推导式:

    randomnumber = (i * 2 for i in range(5) if i % 2 != 0)
    print(randomnumber)  # <generator object <genexpr> at 0x108bccde0>
    randomnumber = tuple(randomnumber)
    print(randomnumber)  # (2, 6)
    num = (i for i in range(3))
    print(num.__next__())  # 0
    print(num.__next__())  # 1
    print(num.__next__())  # 2

元组与列表的区别:

组和列表都属于序列,而且它们又都可以按照特定顺序存放一组元素,类型又不受限制,只要是python支持的类型都可以。那么它们之间有什么区别呢?

列表和元组的区别主要体现在以下几个方面:
  • 列表属于可变序列,它的元素可以随时修改或者删除;元组属于不可变序列,其中的元素不可以修改,除作整体替换。
  • 列表可以使用 append ( )、 extend 耐()、 isert ( )、 remove ( )和 pop ( )等方法实现添加和修改列表元素,而元组没有这几个方法,所以不能向元组中添加和修改元素。同样,元组也不能删除元素。
  • 列表可以使用切片访问和修改列表中的元素。元组也支持切片,但是它只支持通过切片访问元组中的元素,不支持修改。
  • 元组比列表的访问和处理速度快,所以当只是需要对其中的元素进行访问,而不进行任何修改时,建议使用元组。
  • 列表不能作为字典的键,而元组则可以。


字典:

  dic = {'1': 'a', '2': 'b', '3': 'c'}
    print(dic)  # {'1': 'a', '2': 'b', '3': 'c'}
    # 创建空字典的两种方法
    d = {}
    d1 = dict()

    # 通过映射函数创建字典
    l1 = [1, 2, 3]
    l2 = [4, 5, 6]
    # zip()函数用于将多个列表或元组对应位置的元素组合为元组,并返回包含这些内容zip对象
    z1 = zip(l1, l2)
    print(list(z1))  # [(1, 4), (2, 5), (3, 6)]
    d2 = dict(zip(l1, l2))
    print(d2)  # {1: 4, 2: 5, 3: 6}
    # 通过给定的键值对创建字典
    d3 = dict(a='1', b='2', c='3')
    print(d3)  # {'a': '1', 'b': '2', 'c': '3'}
    # fromkeys()方法创建值为空的字典
    d4 = dict.fromkeys(['a', 'b', 'c', 'd'])
    print(d4)  # {'a': None, 'b': None, 'c': None, 'd': None}
    name_t = ('a', 'b', 'c')
    sign = ['11', '22', '33']
    dict1 = {name_t: sign}
    print(dict1)  # {('a', 'b', 'c'): ['11', '22', '33']}
    name_t2 = ['a', 'b', 'c']
    # dict2 = {name_t2: sign}
    # print(dict2)#TypeError: unhashable type: 'list'

    # 字典删除
    # del dict1
    # print(dict1)#NameError: name 'dict1' is not defined
    dict1.clear()
    print(dict1)  # {}
    # 通过键值对访问字典
    dic2 = {'1': 'a', '2': 'b', '3': 'c'}
    print(dic2['1'])  # a
    # print(dic2['a'])  # KeyError: 'a'
    print(dic2['a'] if 'a' in dic2 else '不存在a')  # 不存在a
    print(dic2.get('1'))  # a
    print(dic2.get('a'))  # None
    # 遍历字典
    for i in dic2.items():
        print(i, end='')  # ('1', 'a')('2', 'b')('3', 'c')
    print()
    for k, v in dic2.items():
        print(k, '=', v, end=' ')  # 1 = a 2 = b 3 = c
    print()

 添加,修改,删除字典元素:

 # 添加,修改,删除字典元素
    d1 = dict((('1', 'a'), ('2', 'b'), ('3', 'c')))
    print(d1)  # {'1': 'a', '2': 'b', '3': 'c'}
    # 添加一个元素
    d1['4'] = 'd'
    print(d1)  # {'1': 'a', '2': 'b', '3': 'c', '4': 'd'}
    # 添加一个元素,当元素存在时,则相当于修改功能
    d1['1'] = 'aa'
    print(d1)  # {'1': 'aa', '2': 'b', '3': 'c', '4': 'd'}
    # 删除一个元素
    del d1['3']
    print(d1)  # {'1': 'aa', '2': 'b', '4': 'd'}
    # 删除不存在的保错
    # del d1['aaa']  # KeyError: 'aaa'
    # 优化:
    if 'aaa' in d1:
        del d1['aaa']

字典推导式:

    # 字典推导式
    r1 = {i: random.randint(10, 100) for i in range(1, 5)}
    print(r1)  # {1: 57, 2: 40, 3: 42, 4: 47}
    name = ['12', '34', '56']
    sign = ['aa', 'bb', 'cc']
    d2 = {i: j for i, j in zip(name, sign)}
    print(d2)  # {'12': 'aa', '34': 'bb', '56': 'cc'}

集合:

# 集合的创建
    # 直接使用'{}'创建集合
    set1 = {1, 2, 3}
    print(set1, type(set1))  # {1, 2, 3} <class 'set'>
    # 使用set()函数创建
    set2 = set([1, 2, 3])
    print(set2, type(set2))  # {1, 2, 3} <class 'set'>
    # 集合的添加和修改
    set1.add(4)
    print(set1)#{1, 2, 3, 4}
    # 移除指定元素
    set1.remove(1)
    print(set1)#{2, 3, 4}
    set1.pop()
    print(set1)#{3, 4}
    # 清空集合
    set1.clear()
    print(set1)#set()
    # 指定的内容不存在
    # set1.remove(1)#KeyError: 1
    if 1 in set2:
        set2.remove(1)

 集合的交集、并集、差集运算:

    # 集合的交集、并集、差集运算
    p1 = set(['a', 'b', 'c'])
    p2 = set(['a', '1', '2', '3'])
    # 交集
    print(p1 & p2)  # {'a'}
    # 并集
    print(p1 | p2)  # {'b', '1', 'a', '2', 'c', '3'}
    # 差集
    print(p1 - p2)  # {'b', 'c'}

 列表,元组,字典,集合的区别:





原文地址:https://www.cnblogs.com/fly-book/p/11726159.html