博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python数据类型二(列表和元组)
阅读量:2240 次
发布时间:2019-05-09

本文共 4335 字,大约阅读时间需要 14 分钟。

一、列表

1.1 列表的介绍

  列表是python的基本数据类型之一,其他编程语言也有类似的数据类型,比如JS中的数组,java中的数组等等,它是以[]括起来,每个元素用逗号隔开,而且可以存放各种数据类型,比如以下示例:

  lst = [1,'哈哈','abc',[1,8,0,"百度"],("我","叫","元组"),{
"我叫":"dict字典"},{
"我叫集合","集合"}]

  列表相比于字符串,不仅可以存放不同的数据类型,而且可以存放大量的数据,32位python可以存放536870912个元素,64位可以存放1152921504606846975个元素,而且列表是有序的(按照你保存的顺序),有索引,可以切片,方便取值。

1.2 列表的索引和切片

  列表和字符串一样也拥有索引,如下示例: 

  lst = ["王力宏","周渝民","黄渤","黄磊","刘涛"]  print(lst[0])  # 获取第一个元素,即结果为:王力宏  print(lst[1])  print(lst[2])   lst[3] = "刘宪华" # 注意:列表是可以发生改变的,这点和字符串有区别  print(lst)  # 结果为:['王力宏', '周渝民', '黄渤', '刘宪华', '刘涛']   # 而字符串不能通过索引改变,否则报错,如下代码  str = '孙红雷'  str[0] = '王'  # 报错提示为 TypeError: 'str' object does not support item assignment

  注意:列表是可以发生改变的,这点和字符串不一样,字符串不能通过索引去改变值。

  列表也可以切片,同字符串的切片规则一样,切出来的内容是列表类型,具体如下示例:

  lst = ["王力宏","周渝民","黄渤","黄磊","刘涛"]  print(lst[0:3])   # ['王力宏', '周渝民', '黄渤']  print(lst[:2])    # ['王力宏', '周渝民']  print(lst[1::2])  # ['周渝民', '黄磊']  print(lst[2::-1]) # ['黄渤', '周渝民', '王力宏']  print(lst[-1:-5:-2])  # ['刘涛', '黄渤']

二、列表的增、删、改、查

       注意:列表(list)和字符串(str)是不一样的,lst可以发生改变,所以直接就在原来的对象上进行了操作。

2.1 增

       列表的增加操作有:append,insert,extend,具体用法如下示例:

  lst = ['王力宏','周渝民','黄渤','黄磊']  lst.append('孙红雷')  # 在末尾追加,每次只能增加一个元素  print(lst)  # ['王力宏', '周渝民', '黄渤', '黄磊', '孙红雷']  lst.insert(1,'李晨')  # 在指定index的位置插入指定元素  print(lst)  # ['王力宏', '李晨', '周渝民', '黄渤', '黄磊', '孙红雷']  lst.extend(['杨颖','邓超','陈赫'])  # 迭代添加,一次可以增加多个元素  print(lst)  # ['王力宏', '李晨', '周渝民', '黄渤', '黄磊', '孙红雷', '杨颖', '邓超', '陈赫']

  注意:数字和bool值是不可以用extend添加的,因为他们不是可迭代对象。

2.2 删除

  列表的删除操作有:pop,remove, clear,del,具体用法如下示例:

  lst = ['王力宏','周渝民','黄渤','黄磊']  print(lst.pop(0))  # 删除索引为0的元素,返回所删除的元素,结果为:王力宏  print(lst)  # 列表内容变为['周渝民','黄渤','黄磊']  lst.remove('周渝民')  # 删除指定元素,返回值为None , 注意:remove删除一个不存在的元素会报错  print(lst)  # 列表内容变为['黄渤', '黄磊']  lst.clear()  # 清空列表  print(lst)  # lst变为一个空列表,结果为:[]  # 切片删除  lst = ['王力宏','周渝民','黄渤','黄磊']  del lst[1:3]  # 删除索引为1和2的元素  print(lst) # 结果为:['王力宏','黄磊']

  注意:pop没有参数默认删除最后一个元素。remove('元素')删除一个不存在的元素会报错。

2.3 修改

  列表可以通过索引和切片修改。具体如下示例代码:

  lst1 = ['王者农药','魔兽世界','DNF','逆水寒','反恐精英']  lst1[0] = '扫雷'  # 把索引为0的元素改为 '扫雷'  print(lst1)  # ['扫雷', '魔兽世界', 'DNF', '逆水寒', '反恐精英']  lst1[1::2] = ['qq华夏','qq三国']  # 切片修改时,如果步长不是1,则要注意元素个数  print(lst1)  # 结果为:['扫雷', 'qq华夏', 'DNF', 'qq三国', '反恐精英']  lst1[1:3] = ['泡泡卡丁车']  print(lst1)  # 结果为:['扫雷', '泡泡卡丁车', 'qq三国', '反恐精英']

       列表通过切片修改可理解为先删除再迭代添加。

       注意:当切片修改时,若步长不是1,则要注意元素个数是否匹配,不匹配会报错。

2.4 查询

       列表是一个可迭代对象,所以可以进行for循环,代码如下:

       for el in lst:

         print(el)

2.5 其他操作

       列表的其他操作有:sort,reverse,len,具体用法如下示例:

  lst = [1,34,20,6,89,4,66]  lst.sort()  # 排序,默认升序  print(lst)  # [1, 4, 6, 20, 34, 66, 89]  lst.sort(reverse=True)  print(lst)  # [89, 66, 34, 20, 6, 4, 1]  lst1 = ['张三','李四','李红','赵明','王刚','孙进']  lst1.reverse()  print(lst1)  # ['孙进', '王刚', '赵明', '李红', '李四', '张三']

       列表的长度可以用len(lst)。

三、列表的嵌套

       采用降维操作,一层一层的看就好。示例如下:

  lst = [1,'太白','wusir',['马虎疼',['可口可乐'],'王健林']]  print(lst[2])  # wusir  print(lst[1:3])  # ['太白', 'wusir']  print(lst[1][1]) # 白  lst[2] = lst[2].capitalize()  print(lst)  # [1, '太白', 'Wusir', ['马虎疼', ['可口可乐'], '王健林']]  lst[3][0] = lst[3][0].replace('虎','化')  print(lst)  # [1, '太白', 'Wusir', ['马化疼', ['可口可乐'], '王健林']]

四、元组和元组的嵌套

       元组:俗称不可变的列表,又被称为只读列表,元组也是python的基本数据类型之一,用小括号()括起来,里面可以放任何数据类型的数据,可以查询,也可以循环,也可以切片,但就是不能改。具体示例如下代码:

       tu = ("土豆丝","拍黄瓜","鱼香肉丝","红烧肉","小炒肉")

       print(tu[0])      # 返回索引为0的元素

       print(tu[1])

  print(tu[2:5])  # 切片之后还是元组类型

       尝试修改元组则会报错,如下代码:

       tu[1] = "锅包肉"    # 报错TypeError: 'tuple' object does not support item assignment

       关于不可变,注意:这里元组不可变的意思是子元素不可变,而子元素内部的子元素是可以变的,这取决于子元素是否是可变对象。如下代码示例:

  tu = (1,'哈哈',[],'呵呵')  # tu[2] = ['hello']  # 报错 TypeError: 'tuple' object does not support item assignment  tu[2].append('hello')  print(tu)   # (1, '哈哈', ['hello'], '呵呵')

       元组中如果只有一个元素,一定要添加一个逗号,否则就不是元组。如:tu = (1,)

       空元组用 tu = tuple()表示。

       元组也是可迭代对象,所以也可以用for循环遍历元组,代码如下:

       for el in tu:

         print(el)

       元组也有count(),index()等方法。

五、range

       range可以帮我们获取到一组数据,通过for循环能够获取到这些数据。具体示例如下:

# range()是一个可迭代对象for i in range(10):   # range(n)   0 -> n-1    print(i)for i in range(1,10):  # range(m,n)   m -> n-1    print(i)for i in range(1,10,3):  # range(m,n,q)   m -> n-1 每q个取一个    print(i)for i in range(100,90,-1):  # 倒着取    print(i)#        0      1     2       3        4       5lst = ['砂锅','馒头','盖浇饭','刀削面','大麻花','大煎饼']# 获取到列表的索引,拿到索引之后,可以拿到元素for i in range(len(lst)):    print(i)   # i就是lst的索引    print(lst[i])

 

转载于:https://www.cnblogs.com/li-li/p/9397418.html

你可能感兴趣的文章
LightGBM 如何调参
查看>>
用 TensorFlow.js 在浏览器中训练神经网络
查看>>
cs230 深度学习 Lecture 2 编程作业: Logistic Regression with a Neural Network mindset
查看>>
梯度消失问题与如何选择激活函数
查看>>
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
查看>>
为什么在优化算法中使用指数加权平均
查看>>
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>
Java并发指南1:并发基础与Java多线程
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>
Java并发指南5:JMM中的final关键字解析
查看>>
Java并发指南6:Java内存模型JMM总结
查看>>
Java并发指南7:JUC的核心类AQS详解
查看>>