博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day3_python可变的类型、不可变的类型
阅读量:4687 次
发布时间:2019-06-09

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

1、关于存储地址:

1   a=12   b=a3   print('之前的:',b)4   a=25   print('之后的:',b)

  

为什么会b=a a改变了值,之后b还是等于之前的值呢?

 其实这个位置存储的不是变量a,而是变量a的内存地址,a改变了值,变成了另一个内存地址,但是b存储的是a之前的内存地址,所以输出的时候就不会改变。

查询内存地址使用id()

  

  我们可以看到之前的a、b的内存地址是相同的,但是在a改变了值之后,a的内存地址就改变了,但是b存储的是之前的a的内存地址,所以b的内存地址没有改变。

2、元组

定义元组:citites=('beijing','shanghai')

定义元组使用小括号() 定义列表使用中括号[],中间使用逗号隔开。

元组是不可变的,一旦定义好了之后,就不能再变了。

提示的是类型错误,元组对象不支持修改

元组可以使用的内置函数:

1 citites=('beijing','shanghai')2 print(citites[0])    #查询该下标元素3 print(citites.count('beijing'))    #查询该元素出现的次数4 print(citites.index('beijing'))    #查询该元素下标

  

3、字符串

  在Python中,字符串是不可变类型,即无法直接修改字符串的某一位字符。因此改变一个字符串的元素需要新建一个新的字符串。

使用函数replace() 可以修改字符串

  

4、 依次循环输出列表

1 stus=['saki','yuri','sara','kuma']2 for i in stus:3     print(i)

  

5、依次循环输出字符串的字符

words='红红火火恍恍惚惚'for word in words:    print(word)

  

6、切片,list取值的一种方式

  切片是顾头不顾尾

  stus=['saki','yuri','sara','kuma']

  ①stus[1:3] 表示取下标从1开始,到3结束,但不包括下标为3的值,所以只取1和2

  

  ②stus[:3] 如果不写下标的话,表示从下标0开始到3结束,不包含3

  

  ③stus[-1] 表示取最后一个元素

  

  ④stus[1:] 不写结尾下标的话,表示取值到结尾

  

  ⑤stus[:] 相当于print(stus),取全部list

  

  ⑥import string

   num=list(string.digits)  强制类型转换成list  string.digits表示0-9数字

  

  ⑦num[0:11:2]  下标从0开始,到11位不包含11位结束,每个2个元素取一次值,第二个冒号后面的值代表步长。

  

  ⑧num[::-1] 步长是负数的话,从右向左取值

  

  ⑨num[-6:-10:-1] 步长为负时,是从右向左取值,所以正数是无法取到值的,需要改为负数,-1代表下标为1,-6代表从右往左第6位。

  

  步长为负:  

  前面两个都不写:则取反;   写第一个,第二个不写:从第一个向左取;   写第二个,第一个不写:从第二个向左取;   写两个:开始位置在结束位置的左侧:取不到;   写两个:开始位置在结束位置右侧:从右往左取。 7、取偶
1  a=[1,1,2,3,4,5,6,43,45,72]2  for i in a:3    i%2!=04    a.remove(i)5  print(a)

  

我们可以看到结果中包含奇数,为什么会这样呢?我们可以查看一下for循环每次取的下标和值

  

i=0时,不满足条件,删除,列表改为[1,2,3,4,5,6,43,45,72]

i=1时,取值2,跳过下标为0的1,所以会将值1保留,满足条件,列表为[1,2,3,4,5,6,43,45,72]

i=2时,取值3,不满足条件删除,列表为[1,2,4,5,6,43,45,72]

i=3时,取值5,因为删除了下标2的值,所以后面的值向前移动一个下标,所以跳过值4,判断值5,不满足条件删除,列表为[1,2,4,6,43,45,72]

i=4时,取值43,因为删除了下标3的值,所以后面的值向前移动一个下标,跳过值6,判断值43,不满足条件删除,列表为[1,2,4,6,45,72]

i=5时,取值72,因为删除了下标为4的值,所以后面的值向前移动一个下标,跳过值45,判断值72,满足条件,所以保留 最后结果为[1,2,4,6,45,72]

那我们如何解决这个问题呢?

我们可以将a的内存地址赋给另一个变量,我们在b中循环下标,但是修改a的值,不会应该循环本身,所以我们最后的结果与我们预期的结果一致。

1     a=[1,1,2,3,4,5,6,43,45,72]2     b=a[:]3     for i in b:4      i%2!=05      a.remove(i)6     print(a)

  

8、不引入第三方变量的方式将a,b的值改变

  a,b=1,2

  b,a=a,b

转载于:https://www.cnblogs.com/sunflower666/p/9568604.html

你可能感兴趣的文章
中止法
查看>>
Android mainfests手记
查看>>
列表的方法
查看>>
锋利的jQuery--读书笔记
查看>>
herbetr遇到 Cannot cast java.lang.Character to java.lang.Stringat java.lang.Class.cast
查看>>
Surface电池阈值
查看>>
laravel 模型中的一对一,一对多,多对多的关联
查看>>
判断 iframe 是否加载完成的完美方法
查看>>
MATLAB 动图绘制、保存
查看>>
前端设计说明书
查看>>
Java主类结构:变量与常量
查看>>
oracle Ebs database clone (no apps clone)
查看>>
7月新的开始 - Axure学习05 - 元件库的创建
查看>>
求两个数的最大公约数
查看>>
@link标签 实现注释里面的类跳转
查看>>
python中的进程(二)
查看>>
Environment.CommanLine返回的文件路径使用注意
查看>>
Hive元数据备份
查看>>
201671030126 词频统计软件项目报告
查看>>
J2SE基础夯实系列之正则表达式Java
查看>>