python学习,字符串,列表,元组

旧街凉风 提交于 2020-02-27 23:57:23

一,字符串补充内容
1,可变字符串:命令:io.StringIO()
用法如下:

>>> import io
>>> s='123'
>>> id(s)
2764112685912
>>> sio=io.StringIO(s)
>>> id(sio)
2764111978568
>>> sio.getvalue()
'123'
>>> sio.seek(2)  #指针到2位置
2
>>> sio.write('4')
1
>>> sio.getvalue()
'124'

由代码可知,该命令是将字符串s转化为sio,不产生新的对象。

2,常用运算符与问题

and,or,not 逻辑运算符与,或,非
is,is not 同一性判断
<,<=,>,>=,==!= 比较操作符,比较值
^,I,& 位操作符,按位异或,或,与
<<,>> 位操作符,左移,右移
~ 位操作符,按位翻转
+,-,*,/,//,%,** 算数运算符

(1)3<a<10,在python中是允许的
(2)位操作

>>> a=0b10010
>>> b=0b11001
>>> c=a|b
>>> c
27
>>> bin(c)
'0b11011'
>>> 

可以看到位操作的默认输出为十进制,用bin()命令将其转化为二进制。

移位操作:

a=8
>>> a<<2
32

(3),运算优先级问题
位运算与算数运算>比较运算>赋值运算>逻辑运算

二,列表
1,列表可以存储任意类型的数据。
列表的创建:
(1)用[]直接创建
(2)用list()完成创建,该命令可将其他可迭代的数据转化为列表。
(3)range(start,end,step)创建一个整数列表,用list()转化。
注意这里用,隔开
(4)推导式生成列表
如下:

>>> a=[x*2  for x in range(1,50,2) if x%3==0]
>>> a
[6, 18, 30, 42, 54, 66, 78, 90]

2,列表元素的增加与删除
(1)尽量减少对列表中间元素进行增加或删除,因为涉及大量粘贴,最好在尾部进行
(2)增加元素
append()方法。直接在尾部添加一个元素,不产生新的列表对象
格式如:a.append(20)

+运算符。格式如:a+[50],注意【】不能少,而且会产生新的列表对象。

extend()方法。用于两个列表相加。格式:a.extend(b),在添加过程中不产生新的对象,且执行完命令后新列表保存在a中

insert()方法.在指定位置插入:

a=[1,2,3]
>>> a.insert(2,1)
>>> a
[1, 2, 1, 3]

同样结果保存在a中,即不产生新对象

(3)列表元素删除
del()删除,不产生新对象

 a
[1, 2, 1, 3]
>>> del a[2]
>>> a
[1, 2, 3]

pop方法.不产生新对象,会弹出删除值

a=[1,2,3,4,5,6]
>>> a.pop()
6
>>> a
[1, 2, 3, 4, 5]
>>> a.pop(2)
3
>>> a
[1, 2, 4, 5]

remove()方法:特殊在于直接以具体值删除

 a
[1, 2, 4, 5]
>>> a.remove(2)
>>> a
[1, 4, 5]
>>> 

clear(),删除所有元素只留空列表

 a
	    
[1, 4, 5]
>>> a.clear()
	    
>>> a
	  

(4)列表元素访问与计数
直接访问.如a[2]
index().返回首次的索引值.如

a=[1,2,3,3,4,2,1]
	    
>>> a.index(3)
	    
2
 a.index(3,3,5)
	    
3
>>> 

该方法也可以限定范围.
count(),计算某元素出现次数.如a.count(3)
len(),计算列表中的元素个数,如len(a)
成员资格判断:3 in a或者a.count(3)>0

(5)切片操作
同字符串操作,如下:

>>> a=[1,2,3,4,5,6,7,8,'lhy']
	    
>>> a[:]
	    
[1, 2, 3, 4, 5, 6, 7, 8, 'lhy']
>>> a[1:3]
	    
[2, 3]
>>> a[:3]
	    
[1, 2, 3]
>>> a[::-1]
	    
['lhy', 8, 7, 6, 5, 4, 3, 2, 1]
>>> a[5:1:-1]
	    
[6, 5, 4, 3]
>>> a[-3:-5:-1]
	    
[7, 6]
>>> 

(6)列表的遍历
如下:

>>> for i in a:
	    print(i)

1
2
3
4
5
6
7
8
lhy
>>> a=['123','456','lhy',1]
	    
>>> for i in a:
	    print(i)

123
456
lhy
1

(7)列表的排序
1 修改原列表,不建立新列表的方法
a.sort()升序
a.sort(reverse=Ture)降序
random.shuffle(a)随机排列
2 建立新列表的排序
sorted(a)升序
sorted(a,reverse=Ture)降序

(8)reversed()返回迭代器
注意迭代器只能用一次,因为用过一次后指针已经偏移

> a
	    
['lhy', 1, '456', '123']
>>> c=reversed(a)
	    
>>> c
	    
<list_reverseiterator object at 0x00000207D656BB70>
>>> list(c)
	    
['123', '456', 1, 'lhy']
>>> list(c)
	    
[]

max(a)返回最大值
min(a)返回最小值
sum(a)求和,注意只适用于数字

(8)二维列表:用来存储二维,表格数据
如:

a=[
    ['高小一',18,30000,'北京'],
    ['高小二',18,20000,'上海'],
    ['高小三',18,10000,'深圳']
    ]
for m in range(3):
    for n in range(4):
        print(a[m][n],end='\t')
    print()
高小一	18	30000	北京	
高小二	18	20000	上海	
高小三	18	10000	深圳	
>>> 

注意,子列表之间有,隔开.索引用a[m][n]的形式

三,元组
1,特点:不可变序列
处理速度比列表快
与整数,字符串一样,元组可以作为字典的键,而列表不可以.
2,元组的创建
(1)()创建并且()可以省略
注意a=(20)类型为int
a=(20,)类型为tuple
(2)tuple()来创建与转化元组
(3)用del a来删除一个元组,整个删除

3,元组元素访问
(1)a[0]直接访问
(2)a[1:3]切片访问

4,对元组排序只能用sorted(a),且最后返回一个列表
如:

a=(3,65,3,4,1,4,6)
	    
>>> sorted(a)
	    
[1, 3, 3, 4, 4, 6, 65]

5,zip将多个列表对应元素组合成元组,返回zip对象
如:

a=[1,2,3]
	    
>>> b=[5,6,7]
	    
>>> zip(a,b)
	    
<zip object at 0x0000020118778E88>
>>> d=zip(a,b)
	    
>>> d
	    
<zip object at 0x0000020118778CC8>
>>> tuple(d)
	    
((1, 5), (2, 6), (3, 7))
>>> 

5,可利用生成器推导式创建元组,注意返回的是生成器对象

s=(x*2 for x in range(5))
	    
>>> s
	    
<generator object <genexpr> at 0x000002011874ECA8>
>>> s=[x*2 for x in range(5)]
	    
>>> s
	    
[0, 2, 4, 6, 8]

所以要用list()或tuple()转化,这是元组与列表在生成器的区别.
也可用s.next()遍历数据

>>> s=(x*2 for x in range(5))
	    
>>> s
	    
<generator object <genexpr> at 0x000002011874ECA8>
>>> s.__next__()
	    
0
>>> s.__next__()
	    
2
>>> s.__next__()
	    
4
>>> s.__next__()
	    
6
>>> s.__next__()
	    
8
>>> s.__next__()
	    
Traceback (most recent call last):
  File "<pyshell#155>", line 1, in <module>
    s.__next__()
StopIteration
>>> 

可以看到指针一个一个移动,超出范围就会报错.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!