Pycharm学习第三节

1415-戚同学

发表文章数:6

热门标签

首页 » Python » 正文

第33课可变字符串:io.StringIO
在Python中,字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,只能重新创建一个新的字符串对象。
然而,如果确实需要一个支持原地修改的unicode数据对象,可以使用io.StringIO对象或array模块.

import io
s="hello world"
# 创建可变字符串
sio=io.StringIO(s)
print(sio)
# <_io.StringIO object at 0x00464DA0>   
print(sio.getvalue())
# hello world
# 查找可变开始位置
print(sio.seek(8))
# 8
# 写入变化信息
print(sio.write("fh1"))
# 3
# 得到变化后字符串
print(sio.getvalue())
# hello wofh1

第34课运算符总结:位操作符,优先级问题
Python-位操作( &、 | 、^、~ 、>>、<<)
用于提高运算速度,规避算术运算符。

在位操作运算中,不应该试图考虑先得到一个数的二进制码,而应该将这个数看作是一个二进制码,二进制补码与整数之间是一一对应的。诚然 Python语言中有内置函数 bin将一个整数转换为二进制,Python中使用该函数转换为负数并不是其补码。因此不能先得到该数的二进制码。同时绞尽脑汁得到一个数的二进制补码是没有必要的。

&:按位与操作,只有 1 &1 为1,其他情况为0。可用于进位运算。
|:按位或操作,只有 0|0为0,其他情况为1。
~:逐位取反。
^:异或,相同为0,相异为1。可用于加操作(不包括进位项)。
<<:左移操作,2的幂相关 >>:右移操作,2的幂相关

a=0b11001
b=0b01000
c=a|b
print(bin(c))
print(bin(c|b))
print(bin(c^b))
print(bin(c&b))
# 0b11001
# 0b11001
# 0b10001
# 0b1000
Ca=0b1000
b=0b01000
print(a==b)
# True
a=3
print(a<<3)
print(a<<2)
# 24
# 12

b=48
print(b>>3)
# 6

判断一个整数的二进制补码中 1 的个数:

既然一个整数在计算机内部为二进制的补码,那么直接对整数进行位操作即可,没有必要进行进制的转换。

1)将整数通过移位并与1进行与操作,即可判断当时末尾是否为1.但是由于整数以二进制补码的方式存储,正数右移与负数右移得到的效果并不相同,负数在右移过程中会自动补 1 .由于在c 或c++这种语言中数据的类型要先声明,如 int为32位,而在python中,由于动态语言的特性,数据的位数理想上是不受限制的,因此可通过 移位的次数进行判断,int型数据移位不能超过32即可,这样程序的循环次数恒定为32.
加法操作
数字相加 3+2==>5
字符串拼接 “3”+“2” == >”32”
列表、元组等合并 [10,20,30]+[5,10,100]==>[10,20,30,5,10,100]

乘法操作
数字相乘 3*2==>6
字符串相成 “zx”*3==>”zxzxzx”
列表、元组等复制 [10,20,30]*3==>[10,20,30,10,20,30,10,20,30]

复核赋值运算符
Pycharm学习第三节

运算符优先级
下面从高到低
Pycharm学习第三节
Pycharm学习第三节

第35课:列表:特点,内存分析
序列是一种数据存储方式,用来存储一系列的数据,在内存中,序列就是一块用量存放多个值得连续的内存空间。早python3中一切皆对象,在内存中实际是按照如下方式存储的。
Pycharm学习第三节

从图示中我们可以看出序列中存储的是整数对象的地址,而不是整数对象的值,python中常用的序列结构有:字符串,列表,元组,字典,集合。
列表:用于存储任意数目,任意类型的数据集合。
列表是内置可变序列,是包含多个元素的有序连续的内存空间,列表定义的标准语法格式:
A=[10,20,30,40],其中,100,,30,40这些成为列表a的元素。
列表中的元素可以各不相同,可以是任意类型。
Pycharm学习第三节
Python的列表大小可变,根据需要随时增加或缩小。字符串和列表都是序列类型,一个字符串是一个字符序列,一个列表是任何元素的序列,很多字符串的方法,在列表中也有类似的用法。几乎一模一样。

第36课:创建列表的4种方法:推导式创建列表
第一种:基本语法[]创建:a=[10,20,30,40],b=[]
第二种:list()创建
a=list(“gaoqi”)

第三种:range()创建整数列表
Range()可以帮助我们非常方便的创建整数列表,这在开发中及其有用。语法格式是:range([start],end,[step])
Start参数,可选,默认是0;end参数必选,表示结尾数字;end步长,可选,默认是1.
Python3中range()返回的是一个range对象,而不是列表,我们需要通过list()方法将其转换成列表对象。
List(range())

第四种:推导式生成列表(在for循环后讲)

第37课:列表:元素的5种添加方式,效率问题
列表元素的增加和删除,列表会自动进行内存管理,减少程序员的工作量。但这个特点是合计列表元素的大量移动,效率较低。除非必要,我们一般只在列表的尾部添加元素或删除元素,这会大大提高列表的操作效率。
第一种:append()方法
原地修改列表对象,是真正的列表尾部添加新的元素,速度最快,推荐使用。

# 列表元素的增加和删除
# 采用append()方法
a=[10,20,30,40,50]
print(a.append(80))
# None
print(a)
# [10, 20, 30, 40, 50, 80]

第二种:+运算符操作
并不是真正的尾部添加元素,而是创建新的列表元素,讲原列表的元素和新列表的元素依次复制到新的列表对象中,这样,会涉及大量的复制操作,对于操作大量元素不建议使用。

# 采用+运算符方法
a=[10,20,30,40,50]
print(id(a))
# 19482024
a=a+[80]
print(id(a))
# 19842792
print(a)
# [10, 20, 30, 40, 50, 80]

第三种:extend()方法
讲目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的列表对象。

a=[10,20,30,40,50]
print(id(a))
# 3884456
print(a.extend([80]))
# None
print(id(a))
# 3884456
print(a)
# [10, 20, 30, 40, 50, 80]

第四种:insert()插入元素
使用insert()方法可以讲指定元素插入到列表对象的任意指定位置。这样会让插入位置后面所有的元素进行移动,会影响处理速度。涉及大量元素时,尽量避免使用。

a=[10,20,30,40,50]
print(id(a))
# 6636968
print(a.insert(2,80))
# None
print(id(a))
# 6636968
print(a)
# [10, 20, 80, 30, 40, 50]

类似发生这种移动的函数还有:remove(),pop(),del(),他们在删除非尾部元素时也会发生操作位置后面元素的移动。
第五种:乘法扩展
使用乘法扩展列表,生成一个新列表,新列表元素是原列表元素的多次重复。

# a=[10,20,30,40,50]
# print(a*3)
# # [10, 20, 30, 40, 50, 10, 20, 30, 40, 50, 10, 20, 30, 40, 50]

第38课:列表:元素删除的三种方式,删除本质是数组元素拷贝
第一种方法:del() 删除列表指定位置或者区间或整个列表的元素

a=[10,20,30,40,50]
print(a.del(1))

第二种方法:pop() 删除并返回指定位置元素,如果未指定位置则默认操作列表最后一个元素。

a=[10,20,30,40,50]
print(a.pop(1))

第三种方法:remove() 删除首次出现的指定元素,若不存在该元素抛出异常。

a=[10,20,10,30,10,40,50]
print(a.remove(10))
# None
print(a)
# [20, 10, 30, 10, 40, 50]

https://blog.csdn.net/weixin_52494984/article/details/109905123
第39课:列表:元素的访问,元素出现次数统计,成员资格判断
列表元素访问和计数
第一种方法:通过索引直接访问元素
我们可以通过索引直接访问元素,索引的区间在[0,列表长度-1]这个范围,超过这个范围则抛出异常。

# 通过索引直接访问元素
a=[10,20,10,30,10,40,50]
print(a[7])
# IndexError: list index out of range

第二种方法:index()获得指定元素在列表中首次出现的索引
Index()可以获得指定元素首次出现的索引位置。Index(value,[start,[end]])。其中start和end指定了搜索的范围。

# index()获得指定元素在列表中首次出现的索引
a=[10,20,10,30,10,40,10,50]
print(a.index(10))
print(a.index(10,5))
print(a.index(10,0,5))
# 0
# 6
# 0

第三种方法:count()获得指定元素在列表中出现的次数


# count()获得指定元素在列表中出现的次数
a=[10,20,10,30,10,40,10,50]
print(a.count(10))
# 4

len()返回列表长度

# len()返回列表长度
a=[10,20,10,30,10,40,10,50]
print(len(a))
# 8

成员资格判断
判断列表中是否存在指定的元素,我们可以使用count()方法,返回0则表示不存在,返回大于0则表示存在,但是,一般我们会使用更加简洁的in/not in关键字来判断,直接返回True或者False。

# 成员资格判断
a=[10,20,10,30,10,40,10,50]
print(10 in a)
# True
print(80 not in a)
# True

第40课:列表:切片slice操作(同字符串的使用,适用于字符串,列表,元组等等)
列表的遍历
For obj in listObj:
Print(obj)

列表的遍历
a=[10,20,10,30,10,40,10,50]
for x in a:
    print(x,end="*")
# 10*20*10*30*10*40*10*50*

第41课:列表:排序,revered逆序,max,min,sum
第一种方法:列表排序list.sort()升序,list.sort(reverse=True)降序,修改原列表,不创建新列表的排序
第二种方法:random模块 打乱排序

# 排序
import random
a=[10,20,10,30,10,40,10,50]
print(a.sort())
print(a)
# None
# [10, 10, 10, 10, 20, 30, 40, 50]
print(a.sort(reverse=True))
print(a)
# None
# [50, 40, 30, 20, 10, 10, 10, 10]
print(random.shuffle(a))
print(a)
# None
# [20, 30, 50, 10, 40, 10, 10, 10]

第三种方法:创建新列表的排序
python内置的全局sorted()方法来对可迭代的序列排序生成新的序列。这个方法返回新列表,不对原列表做修改。

a=[10,20,10,30,10,40,10,50]
print(sorted(a))
# [10, 10, 10, 10, 20, 30, 40, 50]
print(a)
# [10, 20, 10, 30, 10, 40, 10, 50]
# 比较可以得到sort修改原序列,而sorted不修改原序列

第42课:列表:二维列表,表格数据的存储的读取
一维列表:可以帮助我们存储一维,线性的数据。如[10,20,30]
二维列表:可以帮助我们存储二维,表格的数据。

嵌套循环打印二维列表所有的数据()由于还没有学循环,照桌敲一遍即可)

# 多维数据
a=[
    ["高一",120122,"数学",30],
    ["高二",120124,"英语",40],
    ["高三",120128,"语文",50],
]
for m in range(3):
    for n in range(4):
        print(a[m][n])
     print()
    # 打印完一行换行

第43课:元组:特点,创建的两种方式,tuple()要点
元组tuple
列表属于可变序列,可以任意修改列表中的元素,元组属于不可变序列,不能修改元组中的元素,因此,元组没有增加元素,修改元素,删除元素相关的方法。
因此,元组没有增加元素,修改元素,删除元素相关的方法。
只需要学习创建和删除,元组中元素的访问和技术即可。元组支持如下操作:
索引访问
切片操作
链接操作
成员关系操作
比较运算操作
计数:元组长度len(),最大值max(),最小值min(),求和sum()等
元组的创建
通过()创建,小括号可以省略,但是只有一个元素的时候,后面的,不可以去掉
通过tuple()创建元组,tuple(可迭代的对象)

# 元组的创建
a=(10,)
d=(10)
print(type(a))
# <class 'tuple'>
print(type(d))
# <class 'int'>
b=(10,20,30,40)
print(b)
# (10, 20, 30, 40)
c=10,20,30,40
print(c)
# (10, 20, 30, 40)

a=tuple()
b=tuple("abc")
c=tuple(range(3))
d=tuple([1,2,3,4])
print(a)
# ()
print(b)
# ('a', 'b', 'c')
print(c)
# (0, 1, 2)
print(d)
# (1, 2, 3, 4)

总结:
tuple()可以接收列表,字符串,其他序列类型,迭代器等生成元组。
list()可以接收元组,字符串,其他序列类型,迭代器等生成列表。

第44课:元组:元素访问,计数方法,切片操作,成员资格判断,zip()
1.元组的元素不能修改
2.元组的访问和列表一样,只不过返回的仍然是元组对象。

# 元组的访问
a=(20,10,30,9,8)
print(a[3])

3.列表关于排序的方法list.sorted()是修改原列表对象,元组没有改方法,如果要对元组排序,只能使用内置函数sorted(tupleObj),生成新的列表对象。
切片同字符串,列表
成员资格判断通字符串,列表
zip(列表1,列表2,…)将多个列表对应位置的元素组合成为元组,并返回这个zip元组。

# zip
a=[10,20,30]
b=[30,40,50,60]
c=["d","e","f"]
print(list(zip(a,b,c)))
# [(10, 30, 'd'), (20, 40, 'e'), (30, 50, 'f')]
# 可以看到60是没有再里面,也没有报错

第45课:元组:生成器推导式创建元组,总结
生成器推导式创建元组
从形式上看,生成器推导式与列表推导式类似,只是生成器推导式使用小括号,列表推导式直接生成列表对象,生成器推导式生成的不是列表也不是元组,而是一个生成器对象。

# 生成器的使用测试
s=(x*2 for x in range(5))
print(s)
# <generator object <genexpr> at 0x004C5630>
print(tuple(s))
# (0, 2, 4, 6, 8)
print(list(s))
# []
# 只能访问一次元素,第二次访问的就是空了,需要再生成一次。
s=(x*2 for x in range(5))
print(s)
# <generator object <genexpr> at 0x004C5C70>
print(list(s))
# [0, 2, 4, 6, 8]

我们可以通过生成器对象,转化成列表或者元组,也可以使用生成器对象的_next_()方法进行遍历,或者直接作为迭代器对象来使用,不管什么方法使用,元素访问结束后,如果需要重新访问其中的元素,必须重新创建该生成器对象。

# 生成器对象的_next_()方法进行遍历
s=(x*2 for x in range(5))
print(s)
# print(s._next_())

元组总结:
元组的核心特点是:不可变序列
元组的访问和处理速度比列表快
与整数和字符串一样,元组可以作为字典的键,列表则永远不能作为字典的键使用。

Python有五个标准的数据类型

Numbers(数字)
String(字符串)
List(列表)
Tuple(元组)
Dictionary(字典)
Python支持四种不同的数字类型:

int(有符号整型)
long(长整型[也可以代表八进制和十六进制])
float(浮点型)
complex(复数)
python的字串列表有2种取值顺序:

从左到右索引默认0开始的,最大范围是字符串长度少1
从右到左索引默认-1开始的,最大范围是字符串开头
List(列表) 是 Python 中使用最频繁的数据类型。

列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套)。
列表用 [ ] 标识,是 python 最通用的复合数据类型。
列表中值的切割也可以用到变量 [头下标:尾下标] ,就可以截取相应的列表,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾。
加号 + 是列表连接运算符,星号 * 是重复操作。
元组是另一个数据类型,类似于List(列表)。

元组用”()”标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。
字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。

列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典用”{ }”标识。字典由索引(key)和它对应的值value组成。

标签:

未经允许不得转载:作者:1415-戚同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《Pycharm学习第三节》 发布于2020-11-21

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录