• python学习笔记02--列表和元组


    一、简介

    数据结构是通过某种方式组织在一起的数据元素的集合。

    序列是python中最基本的数据结构,python中包含6种内建的序列,分别是列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。

    二、使用

    比如说现在想用一个列表存储用户的名称和年龄,可以在python中创建列表:

    dotgua = ['dotgua', 24]

    这里非常像是一个数组,不过这里可以看到列表中可以存放不同的数据类型。

    通用序列操作

    序列的基本操作包括:索引(indexing)、分片(slicing)、加(adding)、乘(multiplying)以及成员检查,以下都以列表为例

    √ 索引

    序列可以根据元素的编号访问--从0开始递增,例如:

    >>> dotgua = ['dotgua', 24]
    >>> dotgua[0]
    'dotgua'
    

    索引也可以是负数,使用负数时python会从右边向左计数:

    >>> dotgua[-1]
    24
    

    字符串本身也可以看做是列表:

    >>> 'dotgua'[2]
    't'
    

    下面是一个示例程序,根据输入的年月日输出相应的日期的月份名称

    #!/usr/bin/env python
    # 根据给定的年月日以数字形式打印出日期
    months = [
        'January',
        'February',
        'March',
        'April',
        'May',
        'June',
        'July',
        'August',
        'September',
        'October',
        'November',
        'December'
        ]
    
    # 以1~31的数字作为结尾的列表
    endings = ['st', 'nd', 'rd'] + 17 * ['th'] + 
             ['st', 'nd', 'rd'] + 7 * ['th'] + ['st']
    
    year = input('Year: ')
    month = input('Month(1-12): ')
    day = input('Day(1-31): ')
    
    month_number = int(month)
    day_number = int(day)
    
    # 将月份和天数减1获得正确的索引
    month_name = months[month_number-1]
    ordinal = day + endings[day_number-1]
    
    print(month_name + ' ' + ordinal + ', ' + year)
    

    √ 分片

    分片用来访问一定范围内的元素。通过冒号隔开的两个索引实现

    >>> numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> numbers[2:4]
    [2, 3]
    

    可以看到,第一个索引指定开始元素的索引,第二个则是最后一个元素的下一个位置的索引

    分片也可以使用负数,负数即是从后向前计数

    >>> numbers[-3:-1]
    [7, 8]
    

    但是可以发现,这样没法取得最后一个元素,如果想取得最后一个元素,省略第二个索引即可

    >>> numbers[-3:]
    [7, 8, 9]
    

    同理,第一个索引也可以省略,即从第一个元素到第二个索引指定的元素

    >>> numbers[:3]
    [0, 1, 2]
    

    甚至,两个索引都可以省略,即获取整个列表,这在复制列表时比较有用

    >>> numbers[:]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    分片还可以设置步长:

    >>> numbers[0:10:2]
    [0, 2, 4, 6, 8]
    

    步长也可以为负数:

    >>> numbers[10:0:-3]
    [9, 6, 3]
    

    √ 序列相加

    >>> [1, 2, 3] + [4, 5, 6]
    [1, 2, 3, 4, 5, 6]
    

    √ 序列乘法

    >>> 'python' * 5
    'pythonpythonpythonpythonpython'
    >>> [4] * 10
    [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
    

    用None来初始化列表,None表示什么都没有

    >>> seq = [None]*10
    >>> seq
    [None, None, None, None, None, None, None, None, None, None]
    

    √ 成员资格

    检查一个元素是否在序列中可以使用in运算符

    >>> 5 in numbers
    True
    

    以下的示例模仿检查用户名密码是否正确:

    database = [
    	['dotgua', '1234'],
    	['dotdai', '4567'],
    	]
    username = input('User name: ')
    password = input('password: ')
    if [username, password] in database:
        print('Access granted')
    else:
        print('Not granted')
    

    √ 长度、最大值和最小值

    len()返回序列的长度

    max()返回序列的最大值

    min()返回序列的最小值

    >>> len(numbers)
    10
    >>> max(numbers)
    9
    >>> min(numbers)
    0
    

    三、列表

    1. list函数

    list函数可以将字符串转化为单个字符的列表:

    >>> list('dotgua')
    ['d', 'o', 't', 'g', 'u', 'a']

    join可以执行相反操作:

    ''.join(['d', 'o', 't', 'g', 'u', 'a'])

    2. 基本操作

    元素赋值

    根据索引即可修改

    删除元素

    使用del关键字删除某个位置的元素

    >>> del numbers[2]
    >>> numbers
    [0, 1, 3, 4, 5, 6, 7, 8, 9]

    分片赋值

    分片操作可以一次赋值或添加多个元素

    >>> numbers = [1, 2, 3]
    >>> numbers[3:] = [4, 5, 6]
    >>> numbers
    [1, 2, 3, 4, 5, 6]

    也可以在添加元素的同时删除元素

    >>> numbers = [1, 2, 3]
    >>> numbers[1:] = [4, 5, 6]
    >>> numbers
    [1, 4, 5, 6]

    或者只删除元素

    >>> numbers[1:] = []
    >>> numbers
    [1]
    

    3. 列表方法

    append

    追加新元素

    count

    统计某个元素出现的次数

    extend

    追加另一个序列

    index

    找到第一个匹配项的位置

    insert

    将元素插入到列表中

    pop

    移除列表中的一个元素(默认是最后一个)

    remove

  • 相关阅读:
    BZOJ 1050 旅行
    BZOJ 1040 骑士
    BZOJ 1038 瞭望塔
    BZOJ 1037 生日聚会
    BZOJ 1823 满汉全席
    BZOJ 3091 城市旅行
    CF702E Analysis of Pathes in Functional Graph
    Luogu 2154 [SDOI2009]虔诚的墓主人
    Luogu 1268 树的重量
    Luogu 4867 Gty的二逼妹子序列
  • 原文地址:https://www.cnblogs.com/dotgua/p/6137338.html
Copyright © 2020-2023  润新知