• python入门(五):切片列表元祖字典


    1.切片

    针对序列,使用切片可以获得我们想要的内容

    序列:字符串、列表、元祖

    特点:可以使用坐标获取某一个值.坐标是从0开始算

    >>> s="0123456789"

    >>> print(s[0])                        #坐标是从0开始算

    0

    >>> print(s[9])

    9

    >>> s=[0,1,2,3,4,5]

    >>> print(s[2])                       #获取列表的第三个元素

    2

    >>> print(s[4])                       #获取列表的第五个元素

    4

    >>> s=(1,2,3,4,5)

    >>> print(s[1])                       #获取元祖的第二个元素

    2

    >>> print(s[4])                       #获取元祖的第五个元素

    5

    >>> s

    (1, 2, 3, 4, 5)

    >>> print(s[-1])                      #取最后一个元素

    5

    >>> print(s[-2])                      #取倒数第二个元素

    4

    >>> list(range(11))

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

    >>> s=list(range(11))

    >>> s

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

    >>> print(s[len(s)//2])                 #列表s的长度除以2的商为要取元素的坐标

    5

    >>> s[5.5]

    Traceback (most recent call last):        #坐标必须是整数,否则会报错

      File "<stdin>", line 1, in <module>

    TypeError: list indices must be integers or slices, not float

    类型错误:列表索引必须是整数或者片,不能是浮点数

    切片:start_pos , end_pos(开区间,不包含), step

    >>> a

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

    >>> a[1:3:1]                     #3是开区间,步长是1

    [1, 2]

    >>> a[0:10:2]

    [0, 2, 4, 6, 8]

    >>> a[0:10:3]

    [0, 3, 6, 9]

    >>> a[::5]                      #如果不写起始结束,默认从0开始,到最后结束

    [0, 5, 10]

    >>> a[::]                       #如果加上步长,全都不写,模式从0开始,步长是0

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

    >>> a[-1:-4]                   #未写步长,步长默认为1,-1+1=0,不在-4之内,所

    []                             #以结果为空

    >>> a[-1:-4:-1]                #步长为-1,可依次输出。

    [10, 9, 8]

    >>> a[::-2]                    #如果步长为负,输出结果也为先显示最后的数据。

    [10, 8, 6, 4, 2, 0]

    2.列表,可变类型

    声明一个列表:

    a=[];

    a=[1,1.1,”a”,[1,2],(1,2,3)]

    判断一下列表的类型:isinstance(a,list)

    >>> isinstance(a,list)

    True

    1)       增加

    1. append                #在最后的位置加

    >>> a=[]

    >>> a.append(1)

    >>> a

    [1]

    >>> a.append("a")

    >>> a

    [1, 'a']

    >>> a.append(1+1j)

    >>> a

    [1, 'a', (1+1j)]

    >>> a=[1,2,3]

    >>> b=[4,5,6]

    >>> a.append(b)                  #会将列表b变成a的一个元素

    >>> a

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

    >>> a.extend(b)                   #extend会将列表b拆开,融合到list a中

    >>> a

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

            2.insert                  #在指定位置加

    >>> a.insert(0,3)                    #在第0个元素的位置加3

    >>> a

    [3, 1, 'a', (1+1j)]

    >>> a.insert(4,"liuyujing")            #在第四个元素的位置加

    >>> a

    [3, 1, 'a', (1+1j), 'liuyujing']

       

    2)       删:                   

    1. del删除整个列表

    >>> del a

    >>> a

    Traceback (most recent call last):

      File "<stdin>", line 1, in <module>

    NameError: name 'a' is not defined    #删除后在调用,提示未定义

            2.del删除指定位置的元素

    a=[1, 2, 3]

    >>> del a[2]                       #删除a中坐标为2的元素

    >>> a

    [1, 2]

    >>> del a[-1]                      #删除最后一个元素

    >>> a

    [1]

    >>> a=[1,2,3,4,5]        

    >>> del a[2:5:2]                   #删除指定范围,且有步长的元素

    >>> a

    [1, 2, 4]

            3.remove指定元素

    >>> a=[1,2,3]

    >>> a.remove(1)                 #删除列表a中的值1

    >>> a

    [2, 3]

    >>> a.remove(4)                 #a中不存在4,但是要删除4时,会报错

    Traceback (most recent call last):

      File "<stdin>", line 1, in <module>

    ValueError: list.remove(x): x not in list

    3)       改                       #其实就是指定位置赋值

    a=[1, 2, 4]

    >>> a[0]=100

    >>> a

    [100, 2, 4]

    >>> a[10]=1                    #修改超过范围的坐标的值,会报错

    Traceback (most recent call last):

      File "<stdin>", line 1, in <module>

    IndexError: list assignment index out of range

    >>> [1,2,3]+[4,5,6]               #两个list相加,合并成一个list

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

    >>> [1,2,3]*3                   #相乘,值不变,复制3次

    [1, 2, 3, 1, 2, 3, 1, 2, 3]

    4)       查

    1. 单个索引查

    >>> a[0]

    100

      2.切片查

    >>> a[:]

    [100, 2, 4]

      3.遍历

    >>> for i in a:

    ...     print(i)

    ...

    100

    2

    4

    >>> max([1,2,3])                #查看list中的最大值

    3

    >>> min([1,2,3])                #查看list中的最小值

    1

    >>> len([1,2,3])                 #查看list的长度

    3

    >>> max([1,2,3,[4,5,6]])          #list中有子list,无法查看最大值

    Traceback (most recent call last):

      File "<stdin>", line 1, in <module>

    TypeError: '>' not supported between instances of 'list' and 'int'

    5)       pop                   #弹出,且删掉指定位置的值

    a=[100, 2, 4]

    >>> a.pop(0)                  #弹出元素0

    100                           #元素0为100

    >>> a

    [2, 4]                          #已删除a中的100元素

    6)       count计数

    >>> a=[1,2,1,3,5]

    >>> a.count(a)                  #列表a中a的个数为0

    0

    >>> a.count(1)                  #列表a中1的个数为2个

    2

    >>> a=[1,2,1,3,5,a]

    >>> a.count(a)                  

    0

    >>> a=[1,2,1,3,5,"a"]

    >>> a.count(a)

    0

    >>> a.count("a")

    1

    3.元祖

    与列表的区别在于元祖不能改,不可变类型

    >>> a=()

    >>> type(a)

    <class 'tuple'>

    >>> a.append("1")                 #元祖不支持增

    Traceback (most recent call last):

      File "<stdin>", line 1, in <module>

    AttributeError: 'tuple' object has no attribute 'append'

    >>> a=1,2                       #定义a时,并没有加(),但实际也是元祖

    >>> type(a)                      #当元素的个数>1时

    <class 'tuple'>

    >>> a=(1)                       #定义a时,即使有(),但也不是元祖类型

    >>> type(a)                      #当元素的个数=1时

    <class 'int'>

    >>> a=(1,)                      #如果就想定义一个元素的元祖,需加,

    >>> type(a)

    <class 'tuple'>

    >>> a=(0,1,2,3,[4,5,6])            #元祖支持查

    >>> a[0]                       #单个索引查

    0

    >>> a[0:3]                      #切片查

    (0, 1, 2)

    >>> a[3:6]

    (3, [4, 5, 6])

    >>> a[4]

    [4, 5, 6]

    >>> a[4][-1]                    #取出元祖中列表的最后一个元素

    6

    4.字典,可变类型

    >>> d={}

    >>> type(d)

    <class 'dict'>

    >>> isinstance(d,dict)

    True

    1)       增

    >>> d[1]="a"                    #key为1,value为”a”

    >>> d

    {1: 'a'}                          #key必须为不可变类型

    >>> d[[1]]="a"                  #定义字典时,key被定义了可变类型list会报错

    Traceback (most recent call last):

      File "<stdin>", line 1, in <module>

    TypeError: unhashable type: 'list'

    >>> d[{1:2}]=1                  #key必须为不可变类型

    Traceback (most recent call last):

      File "<stdin>", line 1, in <module>

    TypeError: unhashable type: 'dict'

    >>> d[(1,2)]=1                 #元祖,字符串,数字等均可作为key

    >>> d

    {(1, 2): 1}

    2)       删

    >>> d

    {1: 2}

    >>> del d[1]                  #写明key值,会删除该key值和value值,字典依然存在

    >>> d

    {}

    >>> d[1]="a"

    >>> d

    {1: 'a'}

    >>> del d                   #删除字典,且不带key值,会删除整个字典

    >>> d

    Traceback (most recent call last):

      File "<stdin>", line 1, in <module>

    NameError: name 'd' is not defined #d未定义

    3)       改

    >>> d[1]=1

    >>> d

    {1: 1}

    >>> d[1]=2                   #当两个key值相同,但value不同时,会替换旧value

    >>> d                        #所以字典的key会自动替重

    {1: 2}

    4)       查

    >>> d=dict(a=1,b=2,c=3)     #快速生成字典的一个表达式

    >>> d

    {'a': 1, 'b': 2, 'c': 3}             #a,b,c均有“”

    >>> d=dict("a"=1,"b"=2,"c"=3)

      File "<stdin>", line 1

    SyntaxError: keyword can't be an expression

    1. 遍历有哪些key值

    >>> for i in d:                #平常遍历的方法遍历字典时,默认遍历的是key值

    ...     print(i)

    ...

    a

    b

    c

    >>> for i in d.keys():          #d.keys(),遍历key,注意keys后有()

    ...     print(i)

    ...

    a

    b

    c

      2.遍历有哪些values值

    >>> for i in d.values():

    ...     print(i)

    ...

    1

    2

    3

      3.同时遍历有哪些key值,有哪些value值

    >>> for k,v in d.items():         #d,items(),同时遍历key和value

    ...     print(k,":",v)             #items,指的是取一对值

    ...

    a : 1

    b : 2

    c : 3

    >>> list(d.items())

    [('a', 1), ('b', 2), ('c', 3)]

    小练习:

    1. 取a=[0,1,2,3,4,5,6,7,8,9,10]中的6,7,8,9这些元素

    >>> a[6:9]

    [6, 7, 8]                       #开区间,9不包括,所以错误

    >>> a[6:10]

    [6, 7, 8, 9]

      2.取a=[0,1,2,3,4,5,6,7,8,9,10]中的0,5,10这些元素

    >>> a[0:10:5]

    [0, 5]                         #开区间,10不包括,所以错误

    >>> a[0:11:5]

    [0, 5, 10]

      3.取a=[0,1,2,3,4,5,6,7,8,9,10]中,从元素5到元素10步长为3的元素。

    >>> a[5:11:3]

    [5, 8]

    >>> a[5::3]

    [5, 8]

      4.取a=[0,1,2,3,4,5,6,7,8,9,10]中,倒取取出10,8,6,4这几个元素

    >>> a[-1:-8:-2]

    [10, 8, 6, 4]

      5.s=”gloryroad is good!”,取出road和good中的oo,并拼成字符串

    >>> s[5:9]+s[14:16]               #切片的使用范围是字符串,列表,元祖!!

    'roadoo'

    >>> s[5:9]+s[-3:-5:-1]             #正数+倒数

    'roadoo'

      6.s='gloryroad is good!',倒序输出gloryroad

    >>> s[8::-1]                     #从前开始数坐标

    'daoryrolg'

    >>> s[-10::-1]                   #从后开始数坐标

    'daoryrolg'

      7.求全部元素的和[1,2,1,2,3,3,3,3],提示:遍历
     

      8.求偶数元素的和[1,2,1,2,3,3,3,3],提示:切片
     
     

      9.统计一下所有数字出现的个数[1,2,1,2,3,3,3,3]
    提示:字典
     
     
     
     
     
     

    小知识:

    1. 切片倒取必须加步长吗?

    答:是

    例如: a=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    >>> a[-4:-1]           #这个步长默认为1,可以取出,-4在前,但是是正取!

    [7, 8, 9]

      2.切片结束的坐标可超范围,不会报错

    >>> s='gloryroad is good!'

    >>> s[20]                         #提示超范围

    Traceback (most recent call last):

      File "<stdin>", line 1, in <module>

    IndexError: string index out of range

    >>> s[5:20]                      #切片时,结尾的位置超范围不会报错,直至取出最后

    'road is good!'                    #一个元素

      3.切片开始与结束的位置坐标可超范围,不会报错

    >>> s[20:25]                    #输出结果为空,但是未报错

    ''

      4.元祖包括了可变类型的时候是可以更改的

    >>> a=(1,[1])

    >>> a[1].append("a")             #这个元祖中的a[1]是列表,便可对a[1]进行更改

    >>> a

    (1, [1, 'a'])

    >>> a[1].append(1+1j)

    >>> a

    (1, [1, 'a', (1+1j)])

    可变类型有list和dict等,字符串是不可变的

      5.字符串不可变的原因:只要更改,存储位置发生变化,实际是两个不同的字符串。

    >>> s="abc"

    >>> id(s)

    2448316775536                  #最初s的id是2448316775536

    >>> s=s+"dd"

    >>> id(s)                        #对s进行更改后,id是2448317718064

    2448317718064

    综上,字符串不是说进行了更改,而是生成了一个新的字符串。

  • 相关阅读:
    Mysql添加用户与授权
    php导出数据到csv
    mysql导入数据和导出数据
    null在mysql中的不同表现
    乌班图安装Lnmp环境
    php框架路由美化后提示No input file specified
    cookie删除失效问题
    MongoDb安装
    MongoDb简介
    位置索引介绍
  • 原文地址:https://www.cnblogs.com/suitcases/p/10362642.html
Copyright © 2020-2023  润新知