Python 列表和元组 - 学习笔记(持续更新)

本贴最后更新于 2206 天前,其中的信息可能已经物是人非

注意事项(Python 内建了 6 种序列,列表和元组为其中常用的两种)

  • 列表可修改,元组不可修改
  • 几乎所有情况下都可以用列表来代替元组
  • 在创建字典时,key 的存储之所以使用元组而不使用列表,是因为列表可修改,元组不可修改

创建形式

  • 列表里可存储任意类型的值
    1、lis = ['value1','value2',value3]
  • 序列可以包含序列
    2、list = ['value1',[value2,'value3']]

序列的通用操作

  • 所有的序列类型都可以进行某些特定的操作

  • 1、索引-indexing
    序列中的所有元素都是有编号的(从 0 开始递增),也就是我们的索引号,可以通过编号进行访问

      如:str = "hello"
      获取`o`:str[4]
      我们也可以倒着获取:str[-1]
    
  • 2、分片-sliceing
    分片就是提取序列的一部分,跟通过索引号访问字符串中的某个字符类型,我们这里是获取某个范围的字符串

      如:str="hello"
      获取`ll`,当然你可以这样:str[2]+str[3]或者str[-3]+str[-2]
      分片获取:str[2:4],也就是从索引号2开始取,一直取到索引号为4之前的元素
      也可以倒着来哦:str[-3:-1],注意取的顺序还是要从左到右哦
      如果要取`llo`:str[2:5]
      如果一直取到末尾,我们也可以这样哦:str[2:]、str[-3:]
      如果取整个序列:str[:],没错,都用空的就可以了哦
      总结:用数学开闭区间来理解 [oneIndex:twoIndex)
    
  • 分片除了设置起始和终止索引号外,我们还可以设置步长哦,其实之前也是有步长的,默认的步长为 1

      同样,我们取str=“hello”重的ll:str[2:4:1]
      我要取e和o呢?
      当然你可以这样str[1]+str[4]或者str[-4]+str[-1]
      但是我们同样可以用分片:str[1::2],也就是取一个元素后隔两个再取
    
  • 3、序列相加-adding
    Python 中的序列可以用 + 直接相加哦,但是要注意,类型必须要一致哦

      lst1 = [1,2,3];
      lst2 = [4,5,6];
      lst3 = lst1 + lst2;
      那么lst此时为[1,2,3,4,5,6]
    
  • 4、序列相乘-multiplying
    Python 中用:新的序列 = 数字*序列

      lst1 = [1];
      lst2 = lst1*5;
      lst2:[1,1,1,1,1];
    
  • 5、检查某个元素是否属于序列
    Python 中判断某个值是否在序列中很简单,使用 in 运算法即可解决。返回的是 boolean 值,true 为存在。false 不存在

  • 6、计算序列长度

  • 7、找出最大最小元素

列表:可变序列

  • 1、list 函数
    list 函数适用于所有类型的序列
    字符串是不可变的,但是我们可以用字符串来创建字符串列表,这样就可以使用列表的可变能力来实现我们的目的了:lst = list("hello") lst 为['h','e','l','l','o'];

列表的基本操作

  • 1、元素赋值

      lst=[1,2,3];
      lst[1] = 4;
      lst : [1,4,3]
      注:不能给不存在的位置赋值,如lst[3]=5就会报错了
    
  • 2、删除元素
    删除元素我们使用 del 语句实现

      lst=[1,2,3];
      del lst[1];
      lst: [1,3]
    
  • 3、分片赋值
    我们之前讲了分片读值,我们也可以分片赋值哦

      str = list("hello");
      str[2::2]=list('xx');
      str : ['h', 'e', 'x', 'l', 'x']
      分片赋值如果插入的位置不存在,会创建新的值,但是步长必须为1哦
    

列表的方法

  • 1、append:在列表末尾添加新的对象

      lst = [1,2];
      lst.append(3);
      lst :[1,2,3]
    
  • 2、count:统计某个元素在列表中出现的次数

      lst = [1,1,[1,2],3];
      ct = lst.count(1);
      ct:2
    
  • 3、extend:在列表末尾追加另一个列表的值

      lst1 = [1,2];
      lst2 = [3,4];
      lst1.extend(lst2);
      lst1 : [1,2,3,4]
      lst2 : [3,4]
      用+号也可以,但是并不是在原来列表追加, 而是产生新的列表
      lst1 = [1,2];
      lst2 = [3,4];
      lst3 = lst1+lst2;
      lst1 :[1,2]
      lst2 :[3,4]
      lst3 :[1,2,3,4]
    
  • 4、index:从列表中找出某个值第一个匹配项的索引位置

      lst = ['h','e','l','l','o',',','h','i']
      ix = lst.index('h');
      ix : 1
    
  • 5、insert:将对象插入列表中,插入的对象可以是不同类型

      lst = [1,2,3];
      lst.insert(1,'hello');
      lst : [1,'hello',2,3]
      使用分片来实现,可读性不好:
      lst = [1,2,3];
      lst[1:1]=['hello'];
      lst : [1,'hello',2,3]
    
  • 6、pop:移除列表中的一个元素,默认是最后一个(pop 方法是唯一一个既能返回元素值又能改变列表的方法)

      lst = [1,2,3];
      v = lst.pop();
      v : 3
      lst : [1,2]
      当然也可以移除指定的
      lst = [1,2,3];
      v = lst.pop(0);
      v : 1
      lst : [2,3]
    
  • 7、remove:移除列表中某个值的第一个匹配项

      lst=[1,3,[1,2],3];
      lst.remove(3);
      lst : [1,[1,2],3]
    
  • 8、reverse:将列表元素反转

      lst = [1,2,3];
      lst.reverse();
      lst : [3,2,1]
    
  • 9、sort:在原列表中对数据进行排序,不会产生副本

      lst = [3,1,2];
      lst.sort();
      lst : [1,2,3]
    
  • 10、sorted(object):生成一份新的列表副本,对副本进行排序,返回值为创建的副本
    lst1 = [3,1,2];
    lst2 = sorted(lst1);
    lst1 : [3,1,2]
    lst2 : [1,2,3]
    另类实现
    lst1 = [3,1,2];
    lst2 = lst1[:];
    lst1 : [3,1,2]
    lst2 : [1,2,3]

  • 11、高级排序 key,reverse,

  • reverse 使用:
    lst = ['1','3','2'];
    lst.sort(reverse=False);
    lst : ['1', '2', '3']
    lst = ['1','3','2'];
    lst.sort(reverse=True)
    ['3', '2', '1']

  • key 使用 :

      lst = [3,1,2];
      lst.sort(key=lambda x:(x));
      [1, 2, 3]
    
      lst = [3,1,2];
      lst.sort(key=lambda x:(-x));
      [3, 2, 1]
    

元组:不可变序列

  • 创建形式 1:用(.)。注意,最后要加多一个.
  • 创建形式 2:tuple()
  • 元组操作比较简单,记住其是不可变的
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    545 引用 • 672 回帖
  • 笔记

    好记性不如烂笔头。

    308 引用 • 793 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...