列表与列表推导式 [3, 5, 7, 9, 11]
[1, 3, 5, 7, 9]
1 list (map (str , range (10 )))
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
1 list (zip ('abcd' , [1 ,2 ,3 ,4 ]))
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
1 list (enumerate ('Python' ))
[(0, 'P'), (1, 'y'), (2, 't'), (3, 'h'), (4, 'o'), (5, 'n')]
1 list (filter (str .isdigit, 'a1b2c3d456' ))
['1', '2', '3', '4', '5', '6']
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
[3, 5, 7]
1 2 3 x = list () x = [1 , 2 , 3 ] del x
使用下标访问列表中的元素 1 2 3 4 5 data = list (range (10 )) print (data)print (data[0 ]) print (data[1 ]) print (data[-1 ])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0
1
9
列表常用方法 append()、insert()、extend() 1 2 3 4 5 6 lst = [1 , 2 , 3 , 4 ] lst.append(5 ) lst.insert(0 , 0 ) lst.insert(2 , 1.5 ) lst.extend([6 , 7 ]) print (lst)
[0, 1, 1.5, 2, 3, 4, 5, 6, 7]
pop()、remove() 1 2 3 4 5 6 7 8 9 lst = [1 , 2 , 3 , 4 , 5 , 6 ] print (lst.pop()) print (lst.pop(0 )) print (lst.pop(2 )) print (lst)lst = [1 , 2 , 3 , 2 , 4 , 2 ] lst.remove(2 ) print (lst)
6
1
4
[2, 3, 5]
[1, 3, 2, 4, 2]
count()、index() 1 2 3 4 lst = [1 , 2 , 2 , 3 , 3 , 3 , 4 , 4 , 4 , 4 ] print (lst.count(2 )) print (lst.index(4 ))
2
6
sort()、reverse() 1 2 3 from random import sampledata=sample(range (10000 ),10 ) print (data)
[2092, 3910, 9114, 9169, 2810, 7072, 1344, 7294, 516, 8302]
1 2 data.reverse() print (data)
[8302, 516, 7294, 1344, 7072, 2810, 9169, 9114, 3910, 2092]
[516, 1344, 2092, 2810, 3910, 7072, 7294, 8302, 9114, 9169]
1 2 data.sort(key=str ) print (data)
[1344, 2092, 2810, 3910, 516, 7072, 7294, 8302, 9114, 9169]
列表推导 1 2 data = [2 **i for i in range (64 )] print (data)
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 2147483648, 4294967296, 8589934592, 17179869184, 34359738368, 68719476736, 137438953472, 274877906944, 549755813888, 1099511627776, 2199023255552, 4398046511104, 8796093022208, 17592186044416, 35184372088832, 70368744177664, 140737488355328, 281474976710656, 562949953421312, 1125899906842624, 2251799813685248, 4503599627370496, 9007199254740992, 18014398509481984, 36028797018963968, 72057594037927936, 144115188075855872, 288230376151711744, 576460752303423488, 1152921504606846976, 2305843009213693952, 4611686018427387904, 9223372036854775808]
1 2 3 4 5 data = [] for i in range (64 ): data.append(2 **i) print (data)
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 2147483648, 4294967296, 8589934592, 17179869184, 34359738368, 68719476736, 137438953472, 274877906944, 549755813888, 1099511627776, 2199023255552, 4398046511104, 8796093022208, 17592186044416, 35184372088832, 70368744177664, 140737488355328, 281474976710656, 562949953421312, 1125899906842624, 2251799813685248, 4503599627370496, 9007199254740992, 18014398509481984, 36028797018963968, 72057594037927936, 144115188075855872, 288230376151711744, 576460752303423488, 1152921504606846976, 2305843009213693952, 4611686018427387904, 9223372036854775808]
1 2 data=[num for num in range (20 ) if num%2 ==1 ] print (data)
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
1 2 3 4 5 6 data=[] for num in range (20 ): if num%2 ==1 : data.append(num) print (data)
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
1 2 3 4 from random import randomdata = [[random() for j in range (5 )] for i in range (3 )] print (data)
[[0.47725032702278103, 0.4965457868385723, 0.40963018073263124, 0.2591984399387045, 0.7171387333668126], [0.8656829892105975, 0.20652896789224207, 0.33007235688746295, 0.28071606988031217, 0.7122402398171469], [0.9037724065635463, 0.7253046535488346, 0.7100199352601256, 0.14821470797167746, 0.380343525451994]]
1 2 3 4 5 6 7 8 9 10 from random import randomdata = [] for i in range (3 ): temp = [] for j in range (5 ): temp.append(random()) data.append(temp) print (data)
[[0.8180307526088073, 0.3935448868790832, 0.26053864269003346, 0.7565407979483234, 0.4774528772296447], [0.5423682793115739, 0.9268499207996582, 0.5712570815043689, 0.22171753085639834, 0.26065067502458994], [0.7251474502370134, 0.633555150364841, 0.9932162648389573, 0.5535546313735566, 0.8778307483985294]]
切片操作 切片是用来获取列表、元组、字符串等有序序列中部分元素的一种语法。在形式上,切片使用2个冒号分隔的3个数字来完成。 [start:end:step]
其中第一个数字start表示切片开始位置,默认为0;第二个数字end表示切片截止(但不包含)位置(默认为列表长度);第三个数字step表示切片的步长(默认为1),省略步长时还可以同时省略最后一个冒号。
当step为负整数时,表示反向切片,这时start应该在end的右侧。
1 2 3 4 5 6 7 data = list (range (20 )) print (data[:]) print (data[:3 ]) print (data[3 :]) print (data[::3 ]) print (data[-3 :]) print (data[:-5 ])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[0, 1, 2]
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[0, 3, 6, 9, 12, 15, 18]
[17, 18, 19]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
元组与生成器表达式 可以通过把若干元素放在一对圆括号中创建元组,如果只有一个元素的话则需要多加一个逗号,例如(3,)。
也可以使用tuple()函数把列表、字典、集合、字符串以及range对象、map对象、zip对象或其他类似对象转换为元组。
很多内置函数、标准库函数和扩展库函数也会返回元组或者包含元组的对象。
元组与列表的区别 元组是不可变的,不能直接修改元组中元素的值,也不能为元组增加或删除元素。因此,元组没有提供append()、extend()和insert()等方法,也没有remove()和pop()方法。
元组的访问速度比列表更快,开销更小。如果定义了一系列常量值,主要用途只是对它们进行遍历或其他类似操作,那么一般建议使用元组而不用列表。
元组可以使得代码更加安全。例如,调用函数时使用元组传递参数可以防止在函数中修改元组,而使用列表则无法保证这一点。
元组可用作字典的键,也可以作为集合的元素,但列表不可以,包含列表的元组也不可以。
生成器表达式 1 2 3 4 5 6 7 8 9 gen = (2 **i for i in range (8 )) print (gen)print (list (gen)) print (tuple (gen)) gen = (2 **i for i in range (8 )) print (next (gen)) print (next (gen))for item in gen: print (item, end=' ' )
<generator object <genexpr> at 0x000001FB94F53CF0>
[1, 2, 4, 8, 16, 32, 64, 128]
()
1
2
4 8 16 32 64 128
序列解包 1 2 3 4 5 6 7 8 x, y, z = 1 , 2 , 3 x, y, z = (False , 3.5 , 'exp' ) x, y, z = [1 , 2 , 3 ] x, y = y, x x, y, z = map (int , '123' ) data = {'a' : 97 , 'b' : 98 } x, y = data.values() print (x,y)
97 98
字典 1 2 3 4 5 6 7 8 data = dict (name='张三' , age=18 , sex='M' ) print (data)data = dict .fromkeys([1 , 2 , 3 , 4 ]) print (data)data = dict (zip ('abcd' , [97 ,98 ,99 ,100 ])) print (data)data = {ch:ord (ch) for ch in 'abcd' } print (data)
{'name': '张三', 'age': 18, 'sex': 'M'}
{1: None, 2: None, 3: None, 4: None}
{'a': 97, 'b': 98, 'c': 99, 'd': 100}
{'a': 97, 'b': 98, 'c': 99, 'd': 100}
字典元素的访问 1 2 3 4 5 6 7 8 9 data = dict (name='张三' , age=18 , sex='M' ) print (data['name' ]) print (data.get('age' ))print (data.get('address' , '不存在这个键' )) print (list (data)) print (list (data.values())) print (list (data.items())) for key, value in data.items(): print (key, value, sep='\t' )
张三
18
不存在这个键
['name', 'age', 'sex']
['张三', 18, 'M']
[('name', '张三'), ('age', 18), ('sex', 'M')]
name 张三
age 18
sex M
字典元素的修改、添加与删除 当以指定“键”为下标为字典元素赋值时,有两种含义:
1)若该“键”存在,表示修改该“键”对应的值;
2)若不存在,表示添加一个新元素。
1 2 3 4 sock = {'IP' : '127.0.0.1' , 'port' : 80 } sock['port' ] = 8080 sock['protocol' ] = 'TCP' print (sock)
{'IP': '127.0.0.1', 'port': 8080, 'protocol': 'TCP'}
使用字典对象的update()方法可以将另一个字典的元素一次性全部添加到当前字典对象,如果两个字典中存在相同的“键”,则以另一个字典中的“值”为准对当前字典进行更新。
1 2 3 sock={'IP' :'127.0.0.1' ,'port' :80 } sock.update({'IP' :'192.168.9.62' ,'protocol' :'TCP' }) print (sock)
{'IP': '192.168.9.62', 'port': 80, 'protocol': 'TCP'}
可以使用字典对象的pop()删除指定“键”对应的元素,同时返回对应的“值”。字典方法popitem()方法用于删除并返回一个包含两个元素的元组,其中的两个元素分别是字典元素的“键”和“值”。另外,也可以使用del删除指定的“键”对应的元素。
1 2 3 4 5 sock={'IP' : '127.0.0.1' , 'port' : 80 , 'protocal' : 'TCP' } print (sock.pop('IP' ))print (sock.popitem())del sock['port' ]print (sock)
127.0.0.1
('protocal', 'TCP')
{}
集合 Python集合是无序、可变的容器对象,所有元素放在一对大括号中,元素之间使用逗号分隔,同一个集合内的每个元素都是唯一的,不允许重复。
集合中只能包含数字、字符串、元组等不可变类型的数据,而不能包含列表、字典、集合等可变类型的数据,包含列表等可变类型数据的元组也不能作为集合的元素。
集合中的元素是无序的,元素存储顺序和添加顺序并不一致。
集合不支持使用下标直接访问特定位置上的元素,也不支持使用random中的choice()函数从集合中随机选取元素,但支持使用random模块中的sample()函数随机选取部分元素。
集合常用方法 1.add()、update() 1 2 3 4 5 data = {30 , 40 , 50 } data.add(20 ) data.add(50 ) data.update({40 , 60 }) print (data)
{50, 20, 40, 60, 30}
pop()、remove()、discard() 1 2 3 4 5 data = {30 , 40 , 50 } data.remove(30 ) data.discard(30 ) print (data.pop()) print (data)
40
{50}
字符串常用方法 字符串属于不可变对象,所有方法都是返回处理后的字符串或字节串,不对原字符串进行任何修改。
encode() 1 2 3 4 bookName = '《Python可以这样学》' print (bookName.encode())print (bookName.encode('gbk' ))print (bookName.encode('gbk' ).decode('gbk' ))
b'\xe3\x80\x8aPython\xe5\x8f\xaf\xe4\xbb\xa5\xe8\xbf\x99\xe6\xa0\xb7\xe5\xad\xa6\xe3\x80\x8b'
b'\xa1\xb6Python\xbf\xc9\xd2\xd4\xd5\xe2\xd1\xf9\xd1\xa7\xa1\xb7'
《Python可以这样学》
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 print ('{0:.4f}' .format (10 /3 ))print ('{0:.2%}' .format (1 /3 ))print ('{0:>10.2%}' .format (1 /3 ))print ("{0:,} in hex is: {0:#x}, in oct is {0:#o}" .format (5555555 ))print ("{1} in hex is: {1:#x}, {0} in oct is {0:o}" .format (6666 , 66666 ))print ('{0:_},{0:#_x}' .format (10000000 ))width = 8 height = 6 print (f'Rectangle of {width} *{height} \nArea:{width*height} ' )
3.3333
33.33%
33.33%
5,555,555 in hex is: 0x54c563, in oct is 0o25142543
66666 in hex is: 0x1046a, 6666 in oct is 15012
10_000_000,0x98_9680
Rectangle of 8*6
Area:48
index()、rindex()、count() 1 2 3 4 text = '处处飞花飞处处;声声笑语笑声声。' print (text.rindex('处' ))print (text.index('声' ))print (text.count('处' ))
6
8
4
replace()、maketrans()、translate() 1 2 3 4 text = "Python是一门非常棒的编程语言。" print (text.replace('棒' ,'优雅' ).replace('编程' , '程序设计' ))print (text)
Python是一门非常优雅的程序设计语言。
Python是一门非常棒的编程语言。
1 2 table='' .maketrans('0123456789' ,'零一二三四伍陆柒捌玖' ) print ('Tel:30647359' .translate(table))
Tel:三零陆四柒三伍玖
ljsut()、rjust()、center() 1 2 3 print ('居左' .ljust(20 )+'结束' )print ('居右' .rjust(20 , '#' )) print ('居中' .center(20 , '=' ))
居左 结束
##################居右
=========居中=========
split()、rsplit()、join() 1 2 3 4 5 6 7 8 text = 'Beautiful is better than ugly.' print (text.split()) print (text.split(maxsplit=1 )) print (text.rsplit(maxsplit=2 )) print ('1,2,3,4' .split(',' )) print (',' .join(['1' , '2' , '3' , '4' ])) print (':' .join(map (str , range (1 , 5 )))) print ('' .join(map (str , range (1 , 5 ))))
['Beautiful', 'is', 'better', 'than', 'ugly.']
['Beautiful', 'is better than ugly.']
['Beautiful is better', 'than', 'ugly.']
['1', '2', '3', '4']
1,2,3,4
1:2:3:4
1234
lower()、upper()、capitalize()、title()、swapcase() 1 2 3 4 5 6 text = 'Explicit is better than implicit.' print (text.lower())print (text.upper())print (text.capitalize())print (text.title())print (text.swapcase())
explicit is better than implicit.
EXPLICIT IS BETTER THAN IMPLICIT.
Explicit is better than implicit.
Explicit Is Better Than Implicit.
eXPLICIT IS BETTER THAN IMPLICIT.
startwith()、endswith() 1 2 3 4 text = 'Simple is better than complex.' print (text.startswith('simple' ))print (text.startswith('Simple' ))print (text.endswith(('.' , '!' , '?' )))
False
True
True
strip()、rstrip()、lstrip() 1 2 3 text = ' ======test===##### ' print (text.strip()) print (text.strip('=# ' ))
======test===#####
test
1 print (text.strip('=# ' ))
text
综合应用 1 2 data=[2 **i for i in range (64 )] print (sum (data))
18446744073709551615
1 2 data=eval (input ('请输入一个包含若干整数的列表:' )) print ([num for num in data if num%2 ==1 ] )
请输入一个包含若干整数的列表:[2,5,4,67,8,6]
[5, 67]
1 2 3 vector1=eval (input ('请输入一个包含若干整数的向量:' )) vector2=eval (input ('请再输入一个包含若干整数的等长向量:' )) print (sum ([num1*num2 for num1,num2 in zip (vector1,vector2)]))
请输入一个包含若干整数的向量:[2,5,4,67,8,6]
请再输入一个包含若干整数的等长向量:[2,5,4,67,8,3]
4616
1 2 3 4 data=eval (input ('请输入一个包含若干整数的列表:' )) m=max (data) print (m)print ([index for index,value in enumerate (data) if value==m])
请输入一个包含若干整数的列表:[2,5,4,67,8,6]
67
[3]
1 2 3 4 5 6 7 8 from string import digitsfrom random import choicez='' .join(choice(digits) for i in range (1000 )) result={} for ch in z: result[ch]=result.get(ch,0 )+1 for digit,fre in sorted (result.items()): print (digit,fre,sep=':' )
0:88
1:118
2:94
3:104
4:125
5:95
6:115
7:88
8:90
9:83
1 2 3 text=input ('请输入一个字符串:' ) result='' .join(sorted (set (text),key=lambda ch:text.index(ch))) print (result)
请输入一个字符串:《Python可以这样学》
《Python可以这样学》
1 2 3 4 5 6 7 A=eval (input ('请输入一个集合:' )) B=eval (input ('再输入一个集合:' )) print ('并集:' ,A|B)print ('交集:' ,A&B)print ('对称差集:' ,A^B)print ('差集A-B:' ,A-B)print ('差集B-A:' ,B-A)
请输入一个集合:{50, 20, 40, 60, 30}
再输入一个集合:{50, 20, 40, 60, 25}
并集: {40, 50, 20, 25, 60, 30}
交集: {40, 50, 20, 60}
对称差集: {25, 30}
差集A-B: {30}
差集B-A: {25}
1 2 text=input ('请输入一个包含空格的字符串:' ) print (' ' .join(text.split()))
请输入一个包含空格的字符串:《Python 可以这样学》
《Python 可以这样学》
1 2 3 text=input ('请输入一个字符串:' ) table='' .maketrans('aeoiu' ,'AEOIU' ) print (text.translate(table))
请输入一个字符串:《Python可以这样学》
《PythOn可以这样学》
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import randomdata1=[random.randint(1 ,10 )]*5 data2=random.choices(range (10 ),k=5 ) data3=random.sample(range (10 ),k=5 ) for data in (data1,data2,data3): print ('=' *20 ) print (data) k1=len (set (data)) k2=len (data) if k1==k2: print ('无重复' ) elif k1==1 : print ('完全重复' ) else : print ('部分重复' )
====================
[3, 3, 3, 3, 3]
完全重复
====================
[3, 9, 5, 8, 7]
无重复
====================
[6, 4, 3, 5, 0]
无重复
来自书籍:《Python数据分析、挖掘与可视化》 ��与可视化》