zoukankan      html  css  js  c++  java
  • python 元组(tuple)

    面试python我想每个人都会被问一个问题,就是python中的list和tuple有什么区别?

    一般情况下,我会回答,list元素可变,tuple元素不可变(书上或者其他的博客都是这么写的),一般情况下,面试官就不会往下问了,然而。。。今天某度的面试官问我:真的不可变?是什么都不可以变么?

    我当时没反应过来,就说不可变。面试官呵呵了,又问tuple可以相加吗,我回答:可以,但是会生产一个新的元组(这个我还回答的不错,暗自高兴一下)

    然后面试官又问:可以删除么?我其实不知道,因为我没删除过,不过,凭元组元素不可变这句话我就直接干脆的回答说不可以删除,后来我查了一下,确实不可以删除。

    总结一下元组的基本注意点及用法吧

    元组我们用的最多的应该是函数中传参数,还有函数返回吧。

    1.元组不可变性验证:

          a = (1,2)

          a[0] = 2 会报错TypeError: 'tuple' object does not support item assignment。

          a = (1,2,[1,2,3])

          a [2][1] = 0 是可以的

           说明:元组元素不可变,是元素指向的数据不可变上面的a[0] = 2报错,是a[0]这个引用指向的2是int数据,int数据本身不可变,python中str,int,char,tuple本身就不可变,list,dict可变。

                      a[2][1]可变是因为这个引用指向的是一个list,list是可变的,所以改变时不会报错。

           看一下摘自网上的图:

    tuple-0

    tuple-1

    所以tuple不变的是指向,指向什么就一直是什么,不能改变

    2.元组的相加

     a = (1,2)    id(a):3052812140L

    b = (3,4)

    a = a+b      id(a):153147604   每个人测的id肯定不同,这个应该没有异议。。。

    此时a = (1,2,3,4)。不是说元组不可变么,怎么变了,其实不过是a指向一个由a和b相加的元组,不是a变了。原来那个元组没变,也没有了引用,坐等被当作垃圾回收。

    3.元组的删除

    tup = (1,2,3,4);
    del tup[0];
    此时会报错TypeError: 'tuple' object doesn't support item deletion

    4.元组访问及切片

     a = (1,2,[3,4])

    a[0]指向1,a[2][1]指向4

    a[:1]指向一个子元组(1,2)

    5.元组操作

         cmp(tuple1, tuple2):比较两个元组元素。
         len(tuple):计算元组元素个数。
         max(tuple):返回元组中元素最大值。
         min(tuple):返回元组中元素最小值。
         tuple(seq):将列表转换为元组。

    cmp(),len(),min(),max()都是序列的内置函数,tuple也是序列,所以可以用内置函数操作

    tuple()是工厂函数

    擦,这下以后面试再问元组应该不会有问题了吧。。。。。

  • 相关阅读:
    Android 通过ViewFlipper实现广告轮播功能并可以通过手势滑动进行广告切换
    [C#][DevPress]自定义数据分页控件
    [C#][SQLLITE]一个数据分页技巧
    [C#]用SharpZipLib压缩多个文件
    [C#][DevPress]省市县乡嵌套查询
    [C#][DevPress]事件委托的使用
    [C#]Excel操作类
    [C#][DevPress]手动添加控件中的子控件或者结构
    [C#]XML操作类
    [C#]把DataTable转换成泛型实体List
  • 原文地址:https://www.cnblogs.com/buptldf/p/4973502.html
Copyright © 2011-2022 走看看