zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    HearthBuddy投降插件2019-11-01的使用
    正则表达式在线分析 regex online analyzer
    Tips to write better Conditionals in JavaScript
    The fileSyncDll.ps1 is not digitally signed. You cannot run this script on the current system.
    Cannot capture jmeter traffic in fiddler
    JMETER + POST + anti-forgery token
    input type color
    HearthBuddy修改系统时间
    What are all the possible values for HTTP “Content-Type” header?
    UDK性能优化
  • 原文地址:https://www.cnblogs.com/suitcases/p/10362642.html
Copyright © 2011-2022 走看看