• python数据结构详解


    Python中常见的数据结构可以统称为容器(container)。序列(如列表和元组)、映射(如字典)以及集合(set)是三类主要的容器。

    一、序列(列表、元组和字符串)

    序列中的每个元素都有自己的编号。Python中有6种内建的序列。其中列表和元组是最常见的类型。其他包括字符串、Unicode字符串、buffer对象和xrange对象。下面重点介绍下列表、元组和字符串。

    1、通用序列操作:

    从列表、元组以及字符串可以“抽象”出序列的一些公共通用方法(不是你想像中的CRUD),这些操作包括:索引(indexing)、分片 (sliceing)、加(adding)、乘(multiplying)以及检查某个元素是否属于序列的成员。除此之外,还有计算序列长度、最大最小元 素等内置函数

    1)索引:

    1 str1='Hello'
    2 nums=[1,2,3,4]
    3 t1=(123,234,345)
    4 print str1[0]
    5 print nums[1]
    6 print t1[2]

    输出:

    H
    2
    345

    2)分片:

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

    1 nums=range(10)
    2 print nums
    3 print nums[1:5]
    4 print nums[6:10]
    5 print nums[1:]
    6 print nums[-3:-1]
    7 print nums[-3:] #包括序列结尾的元素,置空最后一个索引
    8 print nums[:] #复制整个序列

    输出:

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

    不同的步长,有不同的输出:

    1 nums=range(10)
    2 print nums
    3 print nums[0:10]  #默认步长为1 等价于nums[1:5:1]
    4 print nums[0:10:2]  #步长为2
    5 print nums[0:10:3]  #步长为3
    6 ##print nums[0:10:0]  #步长为0
    7 print nums[0:10:-2]  #步长为-2

    输出:

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

    3)序列相加:

    两种相同类型的序列才可以相加;

    1 str1='Hello'
    2 str2=' world'
    3 print str1+str2
    4 num1=[1,2,3]
    5 num2=[2,3,4]
    6 print num1+num2
    7 print str1+num1

    输出:

    Hello world
    [1, 2, 3, 2, 3, 4]

    Traceback (most recent call last):
    File “F:Python est.py”, line 7, in <module>
    print str1+num1
    TypeError: cannot concatenate ‘str’ and ‘list’ objects

    4)乘法:

    1 print [None]*10
    2 str1='Hello'
    3 print str1*2
    4 num1=[1,2]
    5 print num1*2
    6 print str1*num1

    输出:

    [None, None, None, None, None, None, None, None, None, None]

    HelloHello
    [1, 2, 1, 2]

    Traceback (most recent call last):
    File “F:Python est.py”, line 5, in <module>
    print str1*num1
    TypeError: can’t multiply sequence by non-int of type ‘list’

    5)成员资格:

    in运算符会用来检查一个对象是否为某个序列(或者其他类型)的成员(即元素):

    1 str1='Hello'
    2 print 'h' in str1 
    3 print 'H' in str1
    4 num1=[1,2]
    5 print 1 in num1

    输出:

    False
    True
    True

    6)长度、最小值和最大值:

    1 str1='Hello'
    2 print len(str1) 
    3 print max(str1)
    4 print min(str1)
    5 num1=[1,2,1,4,123]
    6 print len(num1) 
    7 print max(num1)
    8 print min(num1)

    输出:

    5
    o
    H
    5
    123
    1

    2、列表

    列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能。

    1 list1=['hello','world']
    2 print list1
    3 list2=[1,2,3]
    4 print list2

    输出:

    [‘hello’, ‘world’]
    [1, 2, 3]

    1)list函数:

    通过list函数(其实list是一种类型而不是函数)对字符串创建列表非常有效:

    1 list3=list("hello")
    2 print list3

    输出:

    [‘h’, ‘e’, ‘l’, ‘l’, ‘o’]

    join函数:

    实现将由字符组成的列表转换为字符串;

    1 somelist = ['a','b','c']
    2 list1 = ``.join(somelist)
    3 print list

    输出:

    'abc'

    2)基本列表操作:

    元素赋值:

    1 x = [1,1,1]
    2 x[1] = 2
    3 print x

    输出:

    [1,2,1]

    删除元素:

    1 list1 = ['h','e','l','l','o']
    2 del list1[1]
    3 print list1

    输出:

    ['h','l','l','o']

    分片赋值:

    1 name = list('Perl')
    2 name[1:] = list('ython')
    3 print name

    输出:

    ['P','y','t','h','o','n']

    3)列表方法:

    append方法:、

    在列表末尾追加新的对象;

    1 list1 = [1,2,3]
    2 list1.append(5)
    3 print list1

    输出:

    [1,2,3,5]

    count方法:

    统计某个元素在列表中出现的次数;

    result = ['to','be','or','not','to','be']
    print result.count('to')

    输出:

    2

    extend方法:

    extend方法会改变原来的列表,连接操作(‘+’)不会改变原来的列表;

  • 相关阅读:
    台州 OJ 3847 Mowing the Lawn 线性DP 单调队列
    洛谷 OJ P1417 烹调方案 01背包
    快速幂取模
    台州 OJ 2649 More is better 并查集
    UVa 1640
    UVa 11971
    UVa 10900
    UVa 11346
    UVa 10288
    UVa 1639
  • 原文地址:https://www.cnblogs.com/anthony-wsw/p/5840193.html
Copyright © 2020-2023  润新知