zoukankan      html  css  js  c++  java
  • Python学习————列表类型

    一、作用:用来存多个值,并且索引的值为对应的值,按位置存放多个值

    二、定义

    l = [1, 1.2, 'yan', [21, 99]]
    

    三、类型转化

    但凡能够被for循环遍历的类型都可以当做参数传给list()转成列表

    res=list('hello')
    print(res)
    
    ['h', 'e', 'l', 'l', 'o']
    
    res=list({'k1':111,'k2':222,'k3':3333})
    print(res)
    
    ['k1', 'k2', 'k3']
    

    四、内置方法

    1、按索引存取值(正向存取+反向存取):即可以取也可以改

    正向取:
    l = [111, 'egon', 'hello']
    print(l[0])
    
    111
    
    反向取:
    l = [111, 'egon', 'hello']
    print(l[-1])
    
    hello
    
    可以取也可以改:索引存在则修改对应的值
    l = [111, 'egon', 'hello']
    l[0]=222 # 将列表的第一个值改为222
    print(l)
    
    [222, 'egon', 'hello']
    
    无论是取值操作还是赋值操作:索引不存在则报错

    2、切片(顾头不顾尾,步长)

    l = [111, 'egon', 'hello', 'a', 'b', 'c', 'd', [1, 2, 3]]
    print(l[0:3])
    print(l[0:5:2]) 
    print(l[0:len(l)])
    print(l[:])
    
    [111, 'egon', 'hello']
    [111, 'hello', 'b']
    [111, 'egon', 'hello', 'a', 'b', 'c', 'd', [1, 2, 3]]
    [111, 'egon', 'hello', 'a', 'b', 'c', 'd', [1, 2, 3]]
    
    new_l=l[:] # 切片等同于拷贝行为,而且相当于浅copy
    
    msg1='hello:egon:<>:18[]==123'
    msg2=msg1[:]
    print(msg1,id(msg1))
    print(msg2,id(msg2))
    
    hello:egon:<>:18[]==123 2473211243232  # id 地址相同
    hello:egon:<>:18[]==123 2473211243232
    

    3、长度(len())

    print(len([1, 2, 3])) # 判断字符长度
    
    3    # 长度为3
    

    4、成员运算in和not in

    in : 判断字符是否在大字符串中
    print('aaa' in ['aaa', 1, 2])  # True     
    print(1 in ['aaa', 1, 2])  # True
    
    not in :判断字符是否不在大字符串中
    print(3 not in ['aaa', 1, 2]) # True
    print(not 3 in ['aaa', 1, 2]) # True   # 能够使用 但不推荐 使用 not.....in....
    

    5、往列表中添加值

    5.1 追加 (.append())

    从后往前加

    l = [111, 'egon', 'hello']
    l.append(3333)  # 将 3333 添加到列表l中 从后往前加
    l.append(4444)  # 将 4444 添加到列表l中 从后往前加
    print(l)
    
    [111, 'egon', 'hello', 3333, 4444]
    
    new_l=[1,2,3]
    l=[111,'egon','hello']
    l.append(new_l) # 将 new_l的值添加到 l 中
    print(l)
    
    [111, 'egon', 'hello', [1, 2, 3]]
    
    5.2 插入值 (.insert())

    根据位置插入

    l = [111, 'egon', 'hello']
    l.insert(0, 'alex') # 将 alex 插入列表 0 号位置
    print(l)
    
    ['alex', 111, 'egon', 'hello']
    
    5.3 extend添加值
    l = [111, 'egon', 'hello']
    new_l=[1,2,3]
    l.extend(new_l)  将 列表 new_l 添加到列表l中 从后往前加
    print(l)
    
    [111, 'egon', 'hello', 1, 2, 3]
    

    6、删除

    方式一:通用的删除方法,只是单纯的删除、没有返回值

    l = [111, 'egon', 'hello']
    del l[1]
    			# x = del l[1] # 抛出异常,不支持赋值语法
    print(l)
    
    [111, 'hello']
    

    方式二:.pop()根据索引删除,会返回删除的值

    l = [111, 'egon', 'hello']
    l.pop() # 不指定索引默认删除最后一个
    l.pop(0) # 删除 第一个
    print(l)
    
    [111, 'egon']
    ['egon', 'hello']
    

    方式三:.remove()根据元素删除,返回None

    l = [111, 'egon', [1, 2, 3], 'hello']
    l.remove([1, 2, 3])
    print(l)
    
    [111, 'egon', 'hello']
    
    l = [111, 'egon', [1, 2, 3], 'hello']
    res = l.remove('egon')
    print(res)  # None
    print(l)
    
    None
    [111, [1, 2, 3], 'hello']
    
    7、循环
    l = [1, 'aaa', 'bbb']
    for x in l:
        l.pop(1)
        print(x)
    
    1
    bbb
    

    五、需要掌握的操作

    1. .count() 统计某个元素在列表中出现的次数
      l = [1, 'aaa', 'bbb','aaa','aaa']
      print(l.count('aaa'))
      
      3    # aaa  在列表 l 中出现3次
      
    2. .index() 打印某个元素的索引(如果找不到就会报错)
      l = [1, 'aaa', 'bbb','aaa','aaa']
      print(l.index('aaa'))
      print(l.index('aaaaaaaaa')) # 找不到报错
      
      1
      ValueError: 'aaaaaaaaa' is not in list  # 报错信息 
      
    3. .clear() 清空列表
      l = [1, 'aaa', 'bbb','aaa','aaa']
      l.clear()
      print(l)
      
      []   # 列表 l 被clear 清空
      
    4. .reverse() 将列表倒过来(不是排序)
      l = [1, 'egon','alex','lxx']
      l.reverse()
      print(l)
      
      ['lxx', 'alex', 'egon', 1]   # reverse 将列表 l 倒过来
      
    5. .sort() 列表内元素必须是同种类型才可以排序
      l = [11, -3, 9, 2, 3.1]
      l.sort()  # 默认从小到大排,称之为升序
      l.sort(reverse=True)  # 从大到小排,设置为降序
      print(l)
      
      [-3, 2, 3.1, 9, 11]
      [11, 9, 3.1, 2, -3] #.sort(reverse=True)   
      

    了解:字符串可以比大小,按照对应的位置的字符依次pk
    字符串的大小是按照ASCI码表的先后顺序加以区别,表中排在后面的字符大于前面的

    print('a'>'b')	 # False  b>a   z>a 
    print('abz'>'abcdefg') # 比较首个字符 如果相同比较一下个字符  大小与字符串长度无关
    
    False
    True
    

    了解:列表也可以比大小,原理同字符串一样,但是对应位置的元素必须是同种类型

    l1 = [1, 'abc', 'zaa'] # l1 < l2  比较第一个值  abc 大小相同比较第二个值 
    l2 = [1, 'abc', 'zb'] # l1 'zaa' l2 'zb' 首个字符相同  比较第二个字符 a < b 所以 l2 >l1
    print(l1 < l2)
    
    True		
    

    六、补充

    1、队列:FIFO,先进先出

    入队操作

    l = []
    l.append('first')
    l.append('second')
    l.append('third')
    print(l)
    
    ['first', 'second', 'third']
    

    出队操作

    l = ['first', 'second', 'third']
    print(l.pop(0))
    print(l.pop(0))
    print(l.pop(0))
    
    first
    second
    third
    
    2、堆栈:LIFO,后进先出

    入栈操作

    l = []
    l.append('first')
    l.append('second')
    l.append('third')
    print(l)
    
    ['first', 'second', 'third']
    

    出队操作

    l = ['first', 'second', 'third']
    print(l.pop())
    print(l.pop())
    print(l.pop())
    
    third
    second
    first
    
  • 相关阅读:
    飞入飞出效果
    【JSOI 2008】星球大战 Starwar
    POJ 1094 Sorting It All Out
    POJ 2728 Desert King
    【ZJOI 2008】树的统计 Count
    【SCOI 2009】生日快乐
    POJ 3580 SuperMemo
    POJ 1639 Picnic Planning
    POJ 2976 Dropping Tests
    SPOJ QTREE
  • 原文地址:https://www.cnblogs.com/x945669/p/12464864.html
Copyright © 2011-2022 走看看