• python学习笔记(4)——list[ ]


    发现个问题,python与C、JAVA等语言相比学习障碍最大差别居然在于版本更迭!这是python官方造的虐啊。。。

    有时针对某问题去google答案,或者自己去博客找共性解答,会出现相互矛盾或者与你正在使用的教程相悖的地方,不知道其他人情况,我自己70%卡壳都是 py2.2与py3.0的语法结构改变!!!

    想想今后还有几个月时间要与浪费声明的版本问题做斗争就头大!!!

    今天是list &tuple,好吧,开始

     python中有六种内建的序列:列表、元素、字符串、Unicode字符串、buffer对象和xrange对象。

    六种通用序列操作:

    1.索引(index)

    2.切片(slice)

    3.加(+)

    4.乘(*)

    5.检测某个元素是否属于这个序列(in或not in)

    6.计算序列长度(len())

    7.找出最大元素和最小元素  min()、max()

    1.索引:序列中所有的元素都有编号,索引从0开始递增。使用负数索引时,python会从右边开始计数(-1指的是序列最右边的元素)

    #索引格式  list[x] 、tuple[x]、str[x]
    例1-创建list类表 l,并索引其元素
    >>> l=['apple','micorosoft','sony']
    >>> type(l)
    <class 'list'>
    >>> l[0]
    'apple'
    >>> l[2]
    'sony'
    >>> l[-1] #负数索引,-1 即倒1
    'sony'
    >>> l[-2]
    'micorosoft'
    
    例2-创建tuple类表 t,并索引其元素
    >>> t=('css','java','php')
    >>> type(t)
    <class 'tuple'>
    >>> t[0]
    'css'
    >>> t[-1]
    'php'
    
    例3-创建str字符串 s,并索引其元素(虽然不是‘表’,但仍可索引,只要其为‘可迭代序列’)
    >>> s='abc123'
    >>> type(s)
    <class 'str'>
    >>> s[0] 'a' >>> s[-2] '2' >>> #后3种序列方法再续
    1 >>> a='apple'  
    2 >>> a[0] 3 'a' 6 >>> a[-1] 7 'e' 8 >>> type('a') 9 <class 'str'>
    >>> s.pop() #字符串也属于序列,可索引,但无list、tuple类函数如 pop、append等,因为那些是人家内置的
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'str' object has no attribute 'pop'

     #索引(index)-只是一种操作方式,它可用在“python中有六种内建的序列:列表、元素、字符串、Unicode字符串、buffer对象和xrange对象。”中的任何一种,list可以用,str也可以用,它是6种序列的"通用函数",并不局限于list()。而list自己内置的独属函数在下面

    #list()方法语法:
    >>> list(seq)
    #参数seq可以是任何'可迭代序列',即 list()可将任何'可迭代序列'定义为list
    
    eg:
    >>> s='123abc'
    >>> s1=list(s)
    >>> s1
    ['1', '2', '3', 'a', 'b', 'c']
    
    #参数seq也可以调用范围函数range()
    >>> h=range(10)
    >>> h
    range(0, 10)
    >>> h1=list(h)
    >>> h1
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    #或直接定义:
    >>> list(range(10))
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

     LIST的一些内置函数规则:  len 、append()、pop()、remove(obj)、del、count、sort、sorted、insert

    >>> list1=['Python','Java','C','JavaScript','C#','Ruby','PHP']
    >>> len(list1)
    7
    >>> list1[0] 'Python' >>> list1[2] 'C' >>> list1[-1] 'PHP' #list.append() 末尾添加元素(参数唯一) #与extend()有本质区别,append()将参数视为独立元素添加,extend()将入参列表元素解包归入目标列表。#相同:俩函数内存地址均不改变,属对原函数的修改,不是新建。 >>> list1.append('html5') >>> list1 ['Python', 'Java', 'C', 'JavaScript', 'C#', 'Ruby', 'PHP', 'html5'] #list.pop() 默认删除末尾元素,(可指定索引号而删除指定位置元素) >>> list1.pop() 'html5' >>> list1 ['Python', 'Java', 'C', 'JavaScript', 'C#', 'Ruby', 'PHP'] >>> list1.pop(1) 'Java' >>> list1 ['Python', 'C', 'JavaScript', 'C#', 'Ruby', 'PHP'] #附1:指定元素名的删除方法,多个同名元素 默认删除第一个 #list.remove(obj)
    >>> list1.remove('C') >>> list1 ['Python', 'java', 'JavaScript', 'C#', 'Ruby', 'PHP']
    #附1:del运算符 删除元素(pop为python内置函数)
    #def list[x]([x:y])
    >>> del list1[1]
    >>> list1
    ['Python', 'JavaScript', 'C#', 'Ruby', 'PHP']
    >>> del list1[2:4]
    >>> list1
    ['Python', 'C', 'Ruby', 'PHP']

    >>> x=['a','b']
    >>> y=x
    >>> y
    ['a', 'b']
    >>> del x
    >>> x
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'x' is not defined
    >>> y
    ['a', 'b']
    
    
    



    #count:用于统计某个元素在列表中出现的次数


    #list.count(obj)


    >>> l=['a','b','b','c','d']


    >>> l.count('b')


    2





    #sort对列表进行原址排序   http://www.cnblogs.com/sunny3312/archive/2017/01/07/6260472.html


    >>> x=[3,1,2,7,6,9,8]


    >>> x.sort()


    >>> x           


    [1, 2, 3, 6, 7, 8, 9]  #x在排序的同时已被修改,若要不改原序列而进行原址排序,可用“副本排序”


    #副本排序两种方法:


    1)[:]分片方法


    >>> x =[4, 6, 2, 1, 7, 9]


    >>> y=x[:]   #注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y:y = x,y和x还是指向同一个列表,并没有产生新的副本。


    >>> y.sort()


    >>> y


    [1, 2, 4, 6, 7, 9]


    >>> x


    [4, 6, 2, 1, 7, 9]


    2)sorted方法


    sorted返回一个有序的副本,并且类型总是列表,如下:


    >>> x =[4, 6, 2, 1, 7, 9]


    >>> y=sorted(x)  #sorted(x)生成一个副本序列,再将其排序,不改变x


    >>> y


    [1, 2, 4, 6, 7, 9]


    >>> x


    [4, 6, 2, 1, 7, 9]









    #list.insert(索引号,插入元素)     指定位置插入元素,本位元素后移 
    >>> list1.insert(1,'java')
    >>> list1
    [
    'Python', 'java', 'C', 'JavaScript', 'C#', 'Ruby', 'PHP']





    #把某个元素替换成别的元素,可以直接赋值给对应的索引位置


    >>> list1


    ['Python', 'Java', 'C', 'JavaScript', 'C#', 'Ruby', 'PHP']


    >>> list1[0]='css'


    >>> list1


    ['css', 'Java', 'C', 'JavaScript', 'C#', 'Ruby', 'PHP']


    #list中元素类型可混合


    >>> L = ['Apple', 123, True]  #字符串、int、 布尔值


    #表中表


    >>> l=[1,2,3,['a','b'],4,5]


    #取值可用l[],l[][]格式


    eg:a


    >>> l[3][0]


    'a'



    #list可为空 []


    >>> L = []
    >>> len(L)
    0

     写到这吧,不把学习的过程都写出来了,太累了~

     2.切片(slice)

    用"索引"访问单个元素,可以使用"切片"操作来访问一定范围内的元素

    >>> l=['a','b','c','d','e']   #0-4位
    >>> l[0:3]  # 切片规则: 类似左闭右开区间,即'取左不取右'
    ['a', 'b', 'c']
    
    
    #从边界取元素,可省略边界(隐式)   边界全部写明=显式
    >>> l[:3]    # =l[0:3]
    ['a', 'b', 'c']
    
    >>> l[2:]    #=l[2:5] 虽然l只有0-4位,但由于取左不取右规则,要取最右的4位,需多取一位
            #如果涉及边界取位,建议用'隐式',可防止出错
    ['c', 'd', 'e']
    
    #负数取位,规则同上
    >>> l[-2:-1] 
    ['d']
    >>> l[-2:]
    ['d', 'e']
    
    >>> l[:]  #边界全省略(隐式),相当于从开始取到结束=全部ist
    ['a', 'b', 'c', 'd', 'e']
    
    #还有一个默认'隐式'的参数-步长(step length)
    >>>l  #默认步长=1(隐式),即每位取1元素
    ['a', 'b', 'c', 'd', 'e']
    >>> l[0:5:2] #设定步长 :2,即每两位取一元素
    ['a', 'c', 'e']
    >>> l[-4::2] #负索引取位规则同,但取得元素依然是正序
    ['b', 'd'] 
    #步长不能为0,但可为负 即反向取位,须让开始点大于结束点
    >>> l[5:2:-1]
    ['e', 'd']  #注:负数步长取得元素顺序是反的,而负数索引取位取得元素依然是正序。
    #正、负数索引取得元素皆正序排列,要得到反向排列 须设定步长为负值。
    #tuple 、str皆可切片,规则同
    #小应用-反向排序
    >>> l=['a', 'b', 'c', 'd', 'e']
    >>> l[::-1]
    ['e', 'd', 'c', 'b', 'a']
    #其实python有内置 反向排序函数 reverse
    # list.reverse()
    >>> s=[1,2,3,4,5]
    >>> s.reverse()
    >>> s
    [5, 4, 3, 2, 1]

     3.序列相加:使用加号可以对两个类型相同的序列进行连接操作:(append、extend、+=、均是在原list基础上添加,不改变目标内存地址。而唯独‘+’是创建新变量储存结果。)

    #list相加
    >>> a=[1,2,3]
    >>> b=['a','b','c']
    >>> a+b     # ‘ + ’操作符 视为将结果赋予一个新建的变量,内存地址改变。想要不改变,使用‘+=’操作符,视为在原list基础上添加。
    [1, 2, 3, 'a', 'b', 'c']
    
    #tuple相加   #规则同上
    >>> a=(1,2,3)
    >>> b=('a','b','c')
    >>> a+b
    (1, 2, 3, 'a', 'b', 'c')
    
    #str相加     #规则同上
    >>> a='123'
    >>> b='abc'
    >>> a+b
    '123abc'
    
    #不同类型不可相加操作
    >>> a=[1,2,3]
    >>> b=(1,2,3)
    >>> a+b
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: can only concatenate list (not "tuple") to list

    #可用于字符串连接
    >>> 'My name '+'is '+'python'
    'My name is python' #自己注意空格格式
    #类比另一个“序列追加”-extend:可以在列表末尾一次性追加另一个序列中的多个值,和连接操作符‘+’不同,extend方法是修改了被扩展的序列(调用extend方法的序列),而原始的连接操作符‘+’返回的是一个全新的列表
    >>> a=[1,2,3]
    >>> b=[4,5,6]
    >>> a+b #连接两个list得到一个新list,但a,b各自并无变化
    [1, 2, 3, 4, 5, 6]
    >>> a #a还是原样
    [1, 2, 3]
    >>> a.extend(b) #extend 是把a改造,将b中元素追加给a,改造后的a不是原来的a.
    >>> a
    [1, 2, 3, 4, 5, 6]

    #index:用于从列表中找出某个值第一个匹配项的索引位置
    #list.index(obj) 由元素名找对应索引位,若有多个同名元素,取第一个序位元素
    >>> l=['a','b','c','d','e']
    >>> l.index('c')
    2

    4.序列乘法: 使用数字n乘以一个序列会生成新的序列,在新的序列中,原来的序列将被重复n次。

    >>> 'helloworld'*3
    'helloworldhelloworldhelloworld'
    >>> [10]*5
    [10, 10, 10, 10, 10]
    >>> (1,2,3)*5
    (1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3)

    #创建只占元素空间不赋值的序列,None为python内建值
    >>> seq = [None] * 10
    >>> seq
    [None, None, None, None, None, None, None, None, None, None]

    5.成员判断:可以使用in或not in运算符判断一个对象是否为某个序列的成员  #一系列python运算符参看http://python.jobbole.com/82706/  ---   http://www.yiibai.com/python/python_basic_operators.html

    #返回布尔值
    >>> L=[1,2,3,'a','b','c']
    >>> 1in L
    True
    >>> 'a'in L
    True
    >>> 'e'not in L
    True
    
    #tuple类也支持此判断函数
    >>> s=(1,2,3)
     >>> 1in s
    True
    >>> 4in s
    False
    
    #str类也支持此判断函数
    >>> r='abc123'
    >>> 'a'in r
    True
    >>> 'bc'in r
    True
    #多重嵌套判断
    >>> s=[1,2,3,['a','b','c'],4,5] #二维序列
    >>> 'a' in s[3]
    True


    >>> s=[1,2,3,['a','b','c',['r1','r2']],4,5] #三维序列
    >>> 'r1' in s[3][3]
    True

    6.长度、最大值和最小值 (len/min/max)

    >>> N=[-1,5,66.7]
    >>> len(N)
    3
    >>> min(N)
    -1
    >>> max(N)
    66.7
    
    >>> s='397'
    >>> len(s)
    3
    >>> min(s)
    '3'
    >>> max(s)
    '9'
    #tuple规则同,略
  • 相关阅读:
    Angular
    Angular
    Angular
    Angular
    Angular
    Angular
    Angular
    springsecurity 源码解读 之 RememberMeAuthenticationFilter
    springsecurity 源码解读之 AnonymousAuthenticationFilter
    springsecurity 源码解读之 SecurityContext
  • 原文地址:https://www.cnblogs.com/deepblue775737449/p/7624961.html
Copyright © 2020-2023  润新知