列表、元组、字典之前的互相转换

列表与元组的转换

# 列表转换成元组:使用 tuple 函数
num_list = [3, 6, 9]
num_tuple = tuple(num_list)
print num_tuple, type(num_tuple) # (3, 6, 9) <type 'tuple'> # 元组转换成列表:使用 list 函数
num_tuple = (2, 4, 6)
num_list = list(num_tuple)
print num_list, type(num_list) # [2, 4, 6] <type 'list'>

字符串格式化输出

字符串的格式化输出使得字符串的使用更加灵活、且格式输出一致。格式化输出的两种方式:百分号方式、format方式。

百分号方式

info = "My name is %s" % "杰伦"
print info # 结果:My name is 杰伦
info = "My name is %s, I'm %d years old" % ("杰伦", 22)
print info # 结果:My name is 杰伦, I'm 22 years old info = "My name is %(name)s, I'm %(age)d years old" % {"name":"杰伦", "age":22}
print info # 结果:My name is 杰伦, I'm 22 years old # 浮点数,并且指定小数点后的位数,四舍五入
st1 = "The number is %.2f" % 68.68888 # 结果:The number is 68.69
st2 = "The number is %6.2f" % 68.68888 # 结果:The number is 68.69
# 百分之几
st3 = "The number is %.2f%%" % 12.366566 # 结果:The number is 12.37%
st4 = "The number is %6.2f%%" % 12.366566 # 结果:The number is 12.37%
# 科学计数法
st5 = "The number is %e" % 11000012 # 结果:The number is 1.100001e+07

format方式

# 方式1:占位符为{},以元组的方式传入
info = "My name is {}, I'm {} years old".format("杰伦", 22) # 方式2:占位符为{int},以元组的方式传入
info = "My name is {0}, I'm {1} years old".format("杰伦", 22)
info = "My name is {1}, I'm {0} years old".format(22, "杰伦")
info = "My name is {1}, I'm {0} years old".format(*[22, "杰伦"]) # 方式3:占位符为{key},以字典的方式传入
info = "My name is {name}, I'm {age} years old".format(name="杰伦", age=22)
info = "My name is {name}, I'm {age} years old".format(**{"name":"杰伦", "age":22}) # 传入列表中的元素
info1 = "My name is {0[0]},I'm {1[1]} years old.".format(["杰伦", "俊杰"], [22, 23])
# 规定传入的参数的格式,并且以元组的形式传入
info2 = "My name is {:s},I'm {:d} years old.".format("杰伦", 22)
# 规定传入的参数的格式,并且以字典的形式传入
info3 = "My name is {name:s},I'm {age:d} years old.".format(name="杰伦", age=22)
# 占位符->s:字符串,d:十进制,b:二进制,0:八进制,x:十六进制,X:大写十六进制,e:科学计数法,.2f:浮点数,保留两位小数
info4 = "numbers -->{:s},{:d},{:b},{:o},{:x},{:X},{:e},{:.2f}".format("hello",15,15,15,15,15,16.6666,16.3333) # 如何将文本高亮显示
name ="\033[42;1m 杰伦 \033[0m"
print name

复制、深拷贝和浅拷贝的区别

复制

import copy

ls1 = ["java", "python", [1,2,3]]
ls2 = ls1 ls2[0] = "c++"
print ls1, ls2 # 输出为:['c++', 'python', [1, 2, 3]] ['c++', 'python', [1, 2, 3]] ls2[2][0] = 6
print ls1, ls2 # 输出为:['c++', 'python', [6, 2, 3]] ['c++', 'python', [6, 2, 3]]

浅拷贝

import copy

ls1 = ["java", "python", [1,2,3]]
ls2 = copy.copy(ls1) # 浅拷贝 # 修改列表中的不可变数据类型,ls2变,ls1不变
ls2[0] = "c++"
print ls1, ls2 # 输出为:['java', 'python', [1, 2, 3]] ['c++', 'python', [1, 2, 3]] # 修改列表中的可变数据类型时,ls2变,ls1也变
ls2[2][0] = 6
print ls1, ls2 # 输出为:['java', 'python', [6, 2, 3]] ['c++', 'python', [6, 2, 3]]

这是由于:浅拷贝-->拷贝的仅仅是原列表以及原列表元素中内存指针,故ls2中的不可变数据类型发生改变时,其内存指针也发生了改变,则当ls2[0]发生改变时,其内存指针发生改变,指向的不再存储"little-five"的内存空间,而是存放"xiaowu"的内存空间。故ls1不受影响。而当修改ls2中可变数据类型时,修改列表[1,2,3]中的元素时,该列表[1,2,3]的内存地址并不发生改变,故ls1和ls2的内存指针均指向该列表[1,2,3],故ls2发生该表,ls1也跟着改变。

修改ls2列表里的不可变数据类型(如字符串),则ls2[0]的地址值就发生了改变,与ls1[0]的地址值不是同一个了,则ls1列表的值也就不会发生改变。如果ls2增加一个元素,则ls1也不会改变。

修改ls2列表里的可变数据类型时(如列表),则ls2[2][0]的地址值没变,与ls1[2][0]的地址值还是同一个,只是这个地址值指向的值变了。

个人理解:列表里面存储的是地址。从下面例子可以看出可变数据类型和不可变数据类型的区别:

# 当修改不可变数据类型,其内存指针发生改变
name = "python"
print id(name) # 140357443045920
name = "java"
print id(name) # 140357443045968 # 当修改可变数据类型时,其内存指针不发生改变
arry = ["English", "Chinese", "Jpan"]
print id(arry) # 140357442918160
arry[2] = "USA"
print id(arry) # 140357442918160

深拷贝

import copy

ls1 = ["java", "python", [1,2,3]]
ls3 = copy.deepcopy(ls1) # 深拷贝 ls3[0] = "c++"
print ls1, ls3 # 输出为:['java', 'python', [1, 2, 3]] ['c++', 'python', [1, 2, 3]] ls3[2][0] = 6
print ls1, ls3 # 输出为:['java', 'python', [1, 2, 3]] ['c++', 'python', [6, 2, 3]]

从上述例子可以看出,ls1与ls3再无任何关联,这是由于ls3拷贝过来时,其拷贝的不止内存指针,同时还创建新的内存空间,并将数据拷贝至新的内存空间。故新的内存指针指向新的内存空间。

  

Python—基础之杂货铺的更多相关文章

  1. Pyhton开发【第五篇】:Python基础之杂货铺

    Python开发[第五篇]:Python基础之杂货铺   字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进 ...

  2. Python开发【第五篇】:Python基础之杂货铺

    字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-310 ...

  3. 【Python之路】第五篇--Python基础之杂货铺

    字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. 1.百分号方式 ...

  4. Python基础之杂货铺

    字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-310 ...

  5. 第四篇:python基础之杂货铺

    在这一篇中我们将对上几篇的Python零碎的知识进行补充,即字符串的格式化输出,以及深浅拷贝,接下来我们将对这两种进行一一介绍. 一.字符串格式化输出 关于字符串的格式化输出,我们需要了解为什么需要字 ...

  6. 第五章:Python基础の生成器、迭代器、序列化和虚拟环境的应用

    本课主题 生成器介紹和操作实战 迭代器介紹和操作实战 序例化和反序例化 Json 和 Pickle 操作实战 字符串格式化的应用 创建虚拟环境实战 本周作业 生成器介紹和操作实战 什么是生成器,生成器 ...

  7. python之最强王者(2)——python基础语法

    背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...

  8. Python开发【第二篇】:Python基础知识

    Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...

  9. Python小白的发展之路之Python基础(一)

    Python基础部分1: 1.Python简介 2.Python 2 or 3,两者的主要区别 3.Python解释器 4.安装Python 5.第一个Python程序 Hello World 6.P ...

随机推荐

  1. 【Swift】WKWebView与JS的交互使用

    一.前言 近日,有朋友问我关于WKWebView与JS的交互问题,可我之前一直使用的是UIWebView,也不曾做过WKWebView的交互啊!接下来大家一块学习下WKWebView是怎么实现原生代码 ...

  2. Swift实战技巧

    Swift实战技巧 从OC转战到Swift,差别还是蛮大的,本文记录了我再从OC转到Swift开发过程中遇到的一些问题,然后把我遇到的这些问题记录形成文章,大体上是一些Swift语言下面的一些技巧,希 ...

  3. Android 查看项目依赖树的四种方式

    Android 查看项目依赖树的四种方式: 方式一: ./gradlew 模块名:dependencies //查看单独模块的依赖 ./gradlew :app:dependencies --conf ...

  4. html5+css3画太极并添加动画效果

    可兼容移动端视图 效果图如下:太极图是可以旋转的 具体实现如下: <!DOCTYPE html> <html lang="zh"> <head> ...

  5. gcc-stack-protector机制【转】

    转自:https://blog.csdn.net/lhl_blog/article/details/70193865 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上 ...

  6. Android Studio中无法找到android.os.SystemProperties解决办法

    这个SystemProperties类主要是在这个jar包中layoutlib.jar,所以现在的办法就是让这个 jar包加载到 android studio中 下面讲解如何添加: 1.找到对应项目的 ...

  7. JetBrains IntelliJ IDEA 2019 for Mac(Java集成开发环境) 2019.3.1

    IntelliJ IDEA 2019中文激活版已全新上线,intellij idea mac是目前编程人员最喜欢的Java集成开发环境,具备智能代码助手.代码自动提示.重构.J2EE支持.Ant.JU ...

  8. arp心得-caidachun

    arp地址解析协议,以前也学习过,一直有疑问,不同网段怎么解析,arp代理是什么,静态路由为什么可以配置下一跳是接口,而不是ip 1.同网段广播请求,单播应答 2.不同网络根据路由表的下一跳地址ip地 ...

  9. BZOJ1369/LG4395 「BOI2003」Gem 树形DP

    问题描述 LG4395 BZOJ1369 题解 发现对于结点 \(x\) ,其父亲,自己,和所有的孩子权值不同,共 \(3\) 类,从贪心的角度考虑,肯定是填 \(1,2,3\) 这三种. 于是套路树 ...

  10. <Matrix> 311 378

    311. Sparse Matrix Multiplication 稀疏矩阵的计算.稀疏矩阵的特点是有大量的0,如果采用暴力算法则比然会有很多无意义的计算. C[ i ][ j ] += A[ i ] ...