设为首页 收藏本站
查看: 1427|回复: 0

[经验分享] Python07 列表、元组

[复制链接]

尚未签到

发表于 2018-8-6 12:18:21 | 显示全部楼层 |阅读模式
列表

1.赋值与取值
  

names = ['zhangsan','lisi','wanger']  

  
print (names[0])        #0表示从左数第一个值
  
print (names[-1])        #-1表示最后一个值
  
print (names[0:3])        #:符号用来表示范围,列表中只有三个元素,正常应该写0:2,但是通过切片取值时,实际最后一个数字不计算,也就是说0:3相当于0:2。
  

  
print (names[:3])        #冒号前面不写数字就表示从0开始
  
print (names[0:])        #0:后面不跟数字的话,表示从左边第一个到最后一个元素
  
print (names[-3:-1])    #元素下标也可以用复数表示,最后一个用-1表示,倒数第二个用-2表示以此类推。
  
print (names[-3:])
  

DSC0000.png


2.常用操作(追加、插入、修改、删除、查找、统计、清空)
  

names.append('lilei')        #通过append可以追加,追加内容到列表的最后面  
names.insert(1,'hanmeimei')        #可以通过insert插入到指定下标位置
  

print (names)  

DSC0001.png

  

names[-1] = 'Perter'        #根据下标来修改元素内容   

DSC0002.png

  

names.remove('lisi')        #直接删除列表中叫做lisi的元素  
print (names)
  

DSC0003.png

  

del names[1]        #删除下标为1的元素,可以看到hanmeimei被删掉了  
print (names)
  

DSC0004.png

  

names.pop()        #pop删除l列表中的一个元素,并返回删除的值,默认括号不指定下标就是删除最后一个元素。  
print (names)
  

print (names.index('wanger'))        #index是索引,可以获取元素的下标  

DSC0005.png

  当前wagner这个元素在列表的第1下标的位置。
  

print (names[names.index('wanger')])        #该代码等同于print (names[1])  

DSC0006.png

  

names = ['zhangsan','lisi','zhangsan']  
print (names.count('zhangsan'))            #统计names中有多少个zhagnsan这个元素
  

DSC0007.png

  

names.clear()        #默认清空所有元素  
print (names)
  

DSC0008.png


3.反转、排序
  

names = [1,5,2,6,3]  
names.reverse()            #使用reverse()反转
  
print (names)
  

DSC0009.png

  

names.sort()                #使用sort()排序  
print (names)
  

DSC00010.png

  

names = ['1aaa','!@#ajkw','abc','ABC']            #排序顺序:特殊符号--数字---大写---小写  
names.sort()
  
print (names)
  

DSC00011.png


4.扩展(合并)、copy
  

name1 = [1,2,3,4]  
name2 = [5,6,7,8]
  
name1.extend(name2)
  

  
#使用extend,将指定的变量(name2)中的元素合并(扩展)到当前变量中,被合并的变量依然存在。注意被扩展的变量(name2)如果被删除,那么name1就无法将其合并过来了。
  

  
print (name1)
  

DSC00012.png

  

name1 = [1,2,3,4]  
name2 = name1.copy()            #将指定变量(name1)的元素都copy过来
  
print (name2)
  

DSC00013.png

DSC00014.png

  修改name1的元素
DSC00015.png

  可以看到name2没有因为name1的修改而改变,name2根据定义的变量位置,从上到下取最近的name1来copy
DSC00016.png

DSC00017.png

  可以看到name2 copy 了从上到下离自己最近的name1,元素是ccc;只copy一个name1的内容,这称作浅copy
DSC00018.png

DSC00019.png

  如果用=来赋值的话,下面修改列表,那么name2也是会改变的。

5.嵌套列表
  

name1=[1,2,3,['zzz']]  
print (name1)                    #第一个name1
  

  
name2=name1.copy()        #name2与name1相同
  
print (name2)
  

  
name1[1]='abc'
  
name1[3][0]='xxx'
  
print(name1)                    #第二个name1,可以看到name1已经修改了
  
print (name2)
  

  #这里name2奇怪的是,下标1copy的是第一个name1,而嵌套的子列表copy的确是第二个name1子列表中的元素, 这是因为name2正常会copy第一层列表的元素,但是第二层自列表的元素在内存中地址是相同的,所以当name1第二层的自列表元素被改了,name2的第二层自列表也就跟着改了。
  

  #列表第一层在内存中地址是不同的,所以不会受到影响。
  

DSC00020.png



  • 调用copy模块  

    import copy  
    name1=[1,2,3,['zzz']]
      
    print (name1)
      
    name2=copy.copy(name1)            #这行代码等于name2=name1.copy(),结果是一样的
      
    print (name2)
      
    name1[1]='abc'
      
    name1[3][0]='xxx'
      
    print(name1)
      
    print (name2)
      

    DSC00021.png


  

import copy  

  
name1=[1,2,3,['zzz']]
  
print (name1)
  
name2=copy.deepcopy(name1)            #使用deepcopy就是深copy
  
print (name2)
  
name1[1]='abc'
  
name1[3][0]='xxx'
  
print(name1)
  
print (name2)
  

DSC00022.png

  可以看到执行结果,深copy并不会因为name1的修改而改变。

6.打印步长列表
  

a =[1,2,3,4,5,6,7,8,9,10]  
print (a[0:-1:2])
  
print (a[::2])
  

DSC00023.png


7.copy的补充
  浅copy的方式有三种
  

import copy  
person=['name',['money',100]]
  

  
#下面是三种浅copy的方式,效果是一样的
  
p1=copy.copy(person)    #引用
  
p2=person[:]
  
p3=list(person)     #工程函数
  

  
其实浅copy是有用途的,比如使用共同账号:
  

  
import copy
  

  
person=['name',['money',100]]
  
person=['name',['money',100]]
  

  
#下面是三种浅copy的方式,效果是一样的
  
p1=copy.copy(person)    #引用
  
p2=person[:]
  
p3=list(person)     #工程函数
  

  
其实浅copy是有用途的,比如使用共同账号:
  

  
import copy
  
person=['name',['money',100]]
  
p1=person[:]
  

  
p2=person[:]
  

DSC00024.png

  当前值都是相同的
  我们假设夫妻两个人,有共同的银行卡号,里面有100块钱
  

p1[0]='lilei'  
p2[0]='hanmeimei'
  

  
print(p1)
  
print(p2)
  

DSC00025.png

  可以看到浅copy只copy了一层,可以看到当前的钱数都是100
  

p1[1][27]=50        #lilei从该账户取出50块钱,因为是共享账户,所以此时hanmeimei的账户应该也只有50块钱  

  
print(p1)
  
print(p2)
  

DSC00026.png

  

a = [['Iphone', '5800'], ['Computer', '9800'], ['Watch', '8000']]  
print (a[2][29])
  

DSC00027.png

  通过打印第2坐标的第1个元素(前面有个0),是8000
  

print (a[:][31])    

DSC00028.png

  本意打算用这个打印命令能够将0、1、2三个子列表的1下标元素给打印出来;但实际要达到这种效果必须要通过循环来操作。
  print 只能打印一次
  但凡是取所有值,只能用循环(比如for循环)
  小结:
  用 = 赋值,原有的变量被修改,新的变量也会被修改。
  用浅copy,原有的变量被修改,第一层元素不会被修改,深层的元素会被修改。
  用深copy,原有的变量无论是第一层还是深层的元素被修改,新的变量都不会被修改。

元组
  元组又叫做只读列表,元组是不可变类型,只能读和查找
  元组只有两个方法count和index
  names =('lilei','hanmeimei')
DSC00029.png

DSC00030.png

  定义产品和价钱列表
DSC00031.png

  定义一个购物车,当前为空
DSC00032.png

  需要判断用户输入的是不是一个数字的字符串,如果是就将该字符串转换成整数类型
  isgigit用来判断是否是数字
DSC00033.png

  可以看到当前实现了输入工资、定义产品编号、商品和价格
  下面是一个优化的代码
DSC00034.png

  图中的break只是为了暂时测试用,下面会删掉。
  enumerate会将循环的列表下标给取出,然后赋值给index;
  而循环括号中的product_list的所有元组内容会赋值给item
DSC00035.png

  可以看到执行效果是一样的。
  以下是购物车程序的完整代码----------------------------------
DSC00036.png

DSC00037.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-547616-1-1.html 上篇帖子: python+sqlplus 下篇帖子: python 实用的30个小技巧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表