1.列表(list)-- list关键字

列表是python的基础数据类型之一,有顺序,可以切片方便取值,它是以[ ]括起来, 每个元素用' , '隔开而且可以存放各种数据类型(字符串,数字,布尔值,列表,集合,元组,字典)

lst = [1,"a",['b',2,True]]

用逗号分隔的是一个元素

id()获取对象的内存地址
列表里存的不是真正的值,而是地址
  • 列表的索引

lst = ['章超印','周道镕','朱凡宇','杨红兴']
print(lst[0])  # 列表中第一个元素
print(lst[1])  # 列表中第二个元素
print(lst[2])  # 列表中第三个元素

注意:列表是可以进行修改的,这里和字符串不一样

lst[3] = '戴军'
print(lst)

s = '周道镕'
s[0] = '章'
print(s)

结果:
Traceback (most recent call last):
  File "D:/python_object/path2/test.py", line 1076, in <module>
    s[0] = '章'
TypeError: 'str' object does not support item assignment
  • 切片

lst = ["章超印", "周道镕", "马云", "马化腾"]
print(lst[0:3])     # ["章超印", "周道镕", "马云"]
print(lst[:3])      # ["章超印", "周道镕", "马云"]
print(lst[1::2])    # ['周道镕','马化腾'] 也有步长
print(lst[2::-1])   # ['马云','周道镕','章超印'] 也可以倒着取
print(lst[-1:-3:-2])    # ['马化腾']  倒着带步长
  • 增删改查

1.增

  • 注意 list和str是不一样的. lst可以发生改变. 所以直接就在原来的对象上进行了操作

  • apend(追加的东西)追加到列表

    lst = ['章超印','周道镕','朱宇凡','杨红兴']
    print(lst)
    lst.append("前面都是帅哥")
    print(lst)
    
    结果:
    ['章超印', '周道镕', '朱宇凡', '杨红兴']
    ['章超印', '周道镕', '朱宇凡', '杨红兴', '前面都是帅哥']
  • insert(索引 , 添加的东西)插入列表中

    尽量不要使用(当数据较大的时候会影响效率)

    lst = ['章超印','周道镕','朱宇凡','杨红兴']
    lst.insert(1,"前面都是帅哥")
    print(lst)
    
    结果:
    ['章超印', '前面都是帅哥', '周道镕', '朱宇凡', '杨红兴']
  • 迭代添加

    lst = ['章超印','周道镕','朱宇凡','杨红兴']
    lst.extend("前面都是帅哥")
    print(lst)
    
    结果:
    ['章超印', '周道镕', '朱宇凡', '杨红兴', '前', '面', '都', '是', '帅', '哥']

2.删

  • pop 通过下标删除元素(默认删除最后一个),有返回值,返回删除元素

    lst = ['章超印','周道镕','朱宇凡','杨红兴']
    print(lst)
    lst.pop()
    print(lst)
    
    结果:
    ['章超印', '周道镕', '朱宇凡', '杨红兴']
    ['章超印', '周道镕', '朱宇凡']
    lst = ['章超印','周道镕','朱宇凡','杨红兴']
    deleted = lst.pop()
    print('被删除的',deleted)
    print(lst)
    
    结果:
    被删除的 杨红兴
    ['章超印', '周道镕', '朱宇凡']
    可指定下标元素
    lst = ['章超印','周道镕','朱宇凡','杨红兴']
    d = lst.pop(2)  # 删除下标位2的元素
    print(d)        # 被删除的元素
    print(lst)
    
    结果:
    朱宇凡
    ['章超印', '周道镕', '杨红兴']
  • remove 通过元素删除

    lst = ['章超印','周道镕','朱宇凡','杨红兴','周道镕']
    lst.remove("周道镕")
    print(lst)
    
    结果:
    ['章超印', '朱宇凡', '杨红兴','周道镕']   #删除第一个
    
    lst.remove('哈哈')   # 删除不存在的元素
    
    结果:
    Traceback (most recent call last):
      File "D:/python_object/path2/test.py", line 1115, in <module>
        lst.remove('哈哈')   # 删除不存在的元素
    ValueError: list.remove(x): x not in list
  • clear 清空

    lst = ['章超印','周道镕','朱宇凡','杨红兴']
    lst.clear()
    print(lst)
    
    结果:
    []

所有数据类型的方法:

  • del()

    lst = ['章超印','周道镕','朱宇凡','杨红兴']
    del lst
    print(lst)    # lst已被强行清理
    
    结果:
    Traceback (most recent call last):
      File "H:/Python代码文件/python24期/test.py", line 707, in <module>
        print(lst)
    NameError: name 'lst' is not defined
    lst = ['章超印','周道镕','朱宇凡','杨红兴']
    del lst[1]
    print(lst)
    
    结果:
    ['章超印', '朱宇凡', '杨红兴']

3.改

  • 索引切片修改

    # 修改
    lst = ['章超印','周道镕','朱宇凡','杨红兴']
    lst[1] = "道镕周"   # 把1号元素修改成道镕周
    print(lst)
    
    结果:
    ['章超印', '道镕周', '朱宇凡', '杨红兴']
    
    lst = ['章超印','周道镕','朱宇凡','杨红兴']
    lst[1:4:2] =["道镕周","红兴杨" ]
    print(lst)    # 切片修改也OK.如果步长不是1,要注意元素的个数(必须要一一对应,少一个不行,多一个也不行)
    
    结果:
    ['章超印', '道镕周', '朱宇凡', '红兴杨']
    
    lst[1:4] = ["前面的是24期最帅的仔"]  # 如果切片没有步长或者步长是1. 则不用关心个数
    print(lst)
    
    结果:
    ['章超印', '前面的是24期最帅的仔']
    
    
      lst = ['章超印','周道镕','朱宇凡','杨红兴']
      lst[1:3] = "123"    #迭代加入
      print(lst)
    
      结果:
      ['章超印', '1', '2', '3', '杨红兴']
      lst = ['章超印','周道镕','朱宇凡','杨红兴']
      lst[1:3] = 1,2,3
      print(lst)
    
      结果:
      ['章超印', 1, 2, 3, '杨红兴']

4.查

  • 列表是一个可迭代对象,所以可以进行for循环

    lst = ['章超印','周道镕','朱宇凡','杨红兴']
    for i in lst:
        print(i)
    
    结果:
    章超印
    周道镕
    朱宇凡
    杨红兴
    
  • 其他操作

1.reverse() (反转)

lst = ['章超印','周道镕','朱宇凡','杨红兴']
lst.reverse()  # 把这个列表进行调转
print(lst)

结果:
['杨红兴', '朱宇凡', '周道镕', '章超印']

2.sort() (排序)

lst = [9, 8, 7, 6, 5, 4, 3, 2, 1]
lst.sort()      #升序 排序
print(lst)

结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9]

lst = [1,2,3,4,5,6,7,8,9]
lst.sort(reverse=True)  # 降序 排序
print(lst)

结果:
[9, 8, 7, 6, 5, 4, 3, 2, 1]

3.count() (统计)

lst = [1, 2, 3, 4, 5, 3, 7, 3, 9]
num = lst.count(3)  # 统计元素3出现的次数,和字符串中功能一样
print(num)

结果:
3

4.index() (通过元素获取下标)

lst = [1,2,3,4,84,4,5,2,8,2,11,88,2]
n = lst.index(5)    #查找5的下标
print(n)

结果:
6

5.获取长度

lst = [1,2,3,4,84,4,5,2,8,2,11,88,2]
print(len(lst))

结果:
13
  • 列表嵌套

lst = [1,'章超印','zhou道镕',['朱凡宇',['杨红兴'],'前面都是帅哥']]

# 找到zhou道镕
print(lst[2])

# 找到章超印和zhou道镕
print(lst[1:3])

# 找到章超印的超字
print(lst[1][1])

# 将zhou道镕拿到,然后首字母大写 在扔回去
s = lst[2]
s = s.capitalize()
lst[2] = s
print(lst)

# 简写
lst[2] = lst[2].capitalize()
print(lst)

# 把章超印换成章帅印
lst[1] = lst[1].replace('超','帅')

# 把朱凡宇换成朱宇凡
lst[3][0] = lst[3][0].replace('凡宇','宇凡')
print(lst)

# 在杨红兴后边添加 前面的是24期最帅的仔
lst[3][1].append('前面的是24期最帅的仔')
print(lst)

2.元组(tuple)-- tuple关键字

元组:俗称不可变的列表,又被成为只读列表,元组也是python的基本数据类型之一,用小括号括起来,里面可以放任何数据类型的数据,查询可以,循环也可以,切片也可以.但不能 增 删 改.

元组在配置文件中会使用
元组就是一个不可变的列表
tu = ('我','怎么','这么','帅')

tu1 = tu[0]  # 支持下标
print(tu1)  

结果:我

for i in tu:
    print(i)  # 进行for循环

结果:
我
怎么
这么
帅

tu2 = tu[0:3]
print(tu2)  # 进行切片

结果:
('我', '怎么', '这么')

tu[0] = "zcy"

结果:
Traceback (most recent call last):
  File "H:/Python代码文件/python24期/day02/3.运算符.py", line 318, in <module>
    tu[0] = "zcy"
TypeError: 'tuple' object does not support item assignment
关于不可变, 注意: 这里元组的不可变的意思是子元素不可变. 而子元素内部的子元素是可以变, 这取决于子元素是否是可变对象.
tu = ('我','怎么','这么',["帅","高","白","富"])
tu[3][3] = "牛B"
print(tu)

结果:
('我', '怎么', '这么', ['帅', '高', '白', '牛B'])
元组中如果只有一个元素. 一定要添加一个逗号, 否则就不是元组,所以元组要写成(1,)
tu = (1)
print(type(tu))

结果:
<class 'int'>

tu = (1,)
print(type(tu))

结果:
<class 'tuple'>

元组嵌套

tu = ('我','怎么','这么',["帅","高","白","富"])
tu1 = tu[0]
tu2 = tu[2]
tu3 = tu[3][0]
tu4 = tu[3][1]

print(tu1)
print(tu2)
print(tu3)
print(tu4)

结果:
我
这么
帅
高 

面试题:

# tu = ()
# print(type(tu))

结果:
<class 'tuple'>

# tu = (“章超印”)
# print(type(tu)

结果:
<class 'str'>

# tu = (“章超印”,)
# print(type(tu)

结果:
<class 'tuple'>

# lst = []
## print(type(lst))

结果:
<class 'list'>

3.range

range和for配合使用

range中文意思为范围

python3中range是一个可迭代对象,写的是怎样的打印的时候就怎样的
python2中range返回的是一个列表,xrange和python3相似的

range 第一个元素是起始位置,第二个是终止位置,第三个是步长

python3 range是原生态

Python2 range是列表

range(0,10) # 0 起始位置 ,10 终止位置(顾头不顾尾)

步长默认为1

for i in range(100,0,-1):
    print(i)#打印100~1

面试题

python3:
    print(range(0,10))   # python3 中range(0, 10)  是一个可迭代对象

    结果:
    range(0,10)

python2:
    xrange和python3中的range是一样的,都是可迭代对象

    print range(0,9)

    结果:
    [0, 1, 2, 3, 4, 5, 6, 7, 8]
lst = [1,2]
lst[0] = lst
print(lst)

结果:
[[...],2]
lst = []
for i in range(5):
    lst.append([])
print(lst)

结果:
[[], [], [], [], []]
lst = []
for i in lst:
    lst.append([])
print(lst)

结果:
[]
lst = []
for i in lst:
    lst.append("alex")
    print(lst)  

结果:
# 不会打印内容  因为lst是空的
lst = [1,2]
for i in lst:
    lst.append("alex")
    print(lst) 

结果:
# 循环打印lst中的内容 -- 此循环是死循环
[1, 2, 'alex']
[1, 2, 'alex', 'alex']
[1, 2, 'alex', 'alex', 'alex']
...
....
.....
lst = [1,2]
for i in lst:
    lst.append("alex")
print(lst)  

结果:
# 死循环 -- 不会打印内容

百万年薪python之路 -- 列表的更多相关文章

  1. 百万年薪python之路 -- 列表练习

    1.写代码,有如下列表,按照要求实现每一个功能 li = ["alex", "WuSir", "ritian", "barry&q ...

  2. 百万年薪python之路 -- 面向对象之继承

    面向对象之继承 1.什么是面向对象的继承 继承(英语:inheritance)是面向对象软件技术当中的一个概念. 通俗易懂的理解是:子承父业,合法继承家产 专业的理解是:子类可以完全使用父类的方法和属 ...

  3. 百万年薪python之路 -- 并发编程之 协程

    协程 一. 协程的引入 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两 ...

  4. 百万年薪python之路 -- MySQL数据库之 Navicat工具和pymysql模块

    一. IDE工具介绍(Navicat) 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具,我们使用Navicat工具,这个工具本质上就是一个socket客户端,可视化的连接 ...

  5. 百万年薪python之路 -- 模块二

    1. 序列化模块 什么是序列化呢? 序列化的本质就是将一种数据结构(如字典.列表)等转换成一个特殊的序列(字符串或者bytes)的过程就叫做序列化. 为什么要有序列化模块? 如果你写入文件中的字符串是 ...

  6. 百万年薪python之路 -- 模块

    1.自定义模块 1.1.1 模块是什么? 模块就是文件,存放一堆常用的函数和变量的程序文件(.py)文件 1.1.2 为什么要使用模块? 1.避免写重复代码,从文件级别组织程序,更方便管理 2.可以多 ...

  7. 百万年薪python之路 -- 数据库初始

    一. 数据库初始 1. 为什么要有数据库? ​ 先来一个场景: ​ 假设现在你已经是某大型互联网公司的高级程序员,让你写一个火车票购票系统,来hold住十一期间全国的购票需求,你怎么写? 由于在同一时 ...

  8. 百万年薪python之路 -- 并发编程之 多线程 二

    1. 死锁现象与递归锁 进程也有死锁与递归锁,进程的死锁和递归锁与线程的死锁递归锁同理. 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因为争夺资源而造成的一种互相等待的现象,在无外力的作用 ...

  9. 百万年薪python之路 -- 内置函数练习

    1.整理今天笔记,课上代码最少敲3遍. 2.用列表推导式做下列小题 过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母 lst = [["a","b"],[ ...

随机推荐

  1. 跟我学SpringCloud | 第二十章:Spring Cloud 之 okhttp

    1. 什么是 okhttp ? okhttp 是由 square 公司开源的一个 http 客户端.在 Java 平台上,Java 标准库提供了 HttpURLConnection 类来支持 HTTP ...

  2. logback.xml配置文件解析一

    配置文件主要结构如下: <?xml version="1.0" encoding="utf-8"?> <configuration> & ...

  3. Build a Contest-创建比赛 CodeForce1100B

    题目链接:Build a Contest 题目原文 Arkady coordinates rounds on some not really famous competitive programmin ...

  4. Spark Streaming 入门

    概述 什么是 Spark Streaming? Spark Streaming is an extension of the core Spark API that enables scalable, ...

  5. cp -rf 操作时依然会提示覆盖

    在linux上经常会使用cp -rf命令,该命令就是强制覆盖指定目录下的文件,但有时使用该命令依然会提示是否覆盖,cp命令的参数有如下一些: 参数说明: -a:此选项通常在复制目录时使用,它保留链接. ...

  6. 百万it资源百度网盘链接分享

    自己大量时间整理的优质资源,容量达3000多G,有需要的朋友可以微我,资源截图:  面试资料: 书籍类: 视频类: 以上只是部分资源,想要资源的亲请加微信咨询. 欢迎加微信咨询,请备注资源: 独乐乐不 ...

  7. 【SQL server基础】手动创建数据库和表格

    use master go if exists(select * from sysdatabases where name='learning') drop database learning go ...

  8. Elasticsearch实战-磁盘IO被打满

    背景 事情是这样的.一天下午4点42分左右.业务反馈我开发的服务在测试环境出现问题,返回资源数据是0.查日志发现是ES访问超时.相当于数据库挂了.持续了20多分钟自己恢复.咨询了ES团队,最终得到下面 ...

  9. RabbitMQ原理介绍

    RabbitMQ历史 RabbitMQ消息系统是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.在同步消息通讯的世界里有很多公开标准(如COBAR的IIO ...

  10. 使用Ingress来负载分发微服务

    目录 使用Ingress来负载分发微服务  Demo规划  准备Demo并完成部署  创建部署(Deployment)资源  创建服务(Service)资源  创建Ingress资源并配置转发规则  ...