类型名称:list,定界符:方括号【】,可变有序。
在Python中,一个列表中的数据类型可以各不相同,可以同时分别整数,实数,字符串等基本类型,甚至是列表,元组,字典,集合以及其他自定义类型对象。
>>>alist = []
>>>alist=list((1,2,3,4,5)) #元组
'''>>>alist
[1,2,3,4,5]'''
>>>alist=list(range(1,10,2)) #range对象
'''>>>alist
[1,3,5,7,9]'''
>>>list('hello') #字符串
['h','e','l','l','o']
>>>alist=list() #list()函数
'''>>>alist
[]'''
<<<del alist
>>>alist=[1,2,3,4,5]
>>>del alist[1]
[1,3,4,5]
>>>alist=[1,2,3,4,5]
>>>del alist[:3] #删除前3个元素
[4,5]
>>>alist=[1,2,3,4,5]
>alist.pop()
[5]
>>>alist=[1,2,3,4,5]
>>>alist.pop(1)
[2]
>>>alist=[1,3,2,3,4]
>>>alist.remove(3)
[1,2,3,4]
>>>alist=[1,2,1,2,1,1,1] #切片 删除1 (后面详细说)
>>>for i in alist[::]:
if i == 1:
alist.remove(i)
>>>alist=[1,2,1,2,1,1,1] #从后往前删
>>>for i in range(len(x)-1,-1,-1):
if alist[i]==1:
del alist[i]
>>>alist=[1,3]
>>>alist=alist+[5] #中括号里是单个元素值
[1,3,5]
>>>alist=[]
>>>alist += '1234'
['1','2','3','4']
>>>alist += range(3)
['1','2','3','4',0,1,2]
>>>alist=[1,3]
>>>alist.append(5)
[1,3,5]
>>>alist=[1,2,3] #对比extend()
>>>alist.append(['A','B'])
[1,2,3 ['A','B']]
>>>alist=[1,2,3]
>>>alist.extend([7,8])
[1,2,3,7,8]
>>>alist=[1,2,3]
>>>alist.extend((7,8))
[1,2,3,7,8]
>>>alist=[1,2,3] #对比append()
>>>alist.extend(['A','B'])
[1,2,3,'A','B']
>>>alist=[1,2,3]
>>>alist.insert(2,6)
[1,2,6,3]
>>>alist=[1,2,3]
>>>alist=alist*3
[1,2,3,1,2,3,1,2,3]
>>>alist=[[1,2]]*3
[[1,2],[1,2],[1,2]]
>>>alsit[0][0]=5
[[5,2],[5,2],[5,2]]
>>>alist=[[None]*2]*3
[[None,None],[None,None],[None,None]]
>>>alist=[1,2,3,4,5]
>>>alist[3]
[4]
>>>alist=[1,3,2,3,4]
>>>alist.index(3)
1
>>>alist[1,3,2,3,4]
>>>alist.count(3)
2
使用in关键字来判断一个值是否在列表中,返回结果为True,False。
>>>alist=[1,2,3,4,5]
>>>3 in alist
True
切片适用于列表,元组,字符串,range对象等类型,但作用于列表时功能强大。
切片使用两个冒号分割的三个数字来完成:
第一个数字表示切片开始位置(默认为0)
第二个数字表示切片截止(但不包含)位置(默认为列表长度)
第三个数字表示切片的步长(默认为1),当步长为默认值1时,可以省略最后一个冒号
>>>alist=[1,2,3,4,5,6,7,8]
>>>alist[::] #返回包含所有元素的新列表
[1,2,3,4,5,6,7,8]
>>>alist[::-1] #逆序的所有元素
[8,7,6,5,4,3,2,1]
>>>alist[::2] #奇数位置,隔一个取一个
[1,3,5,7]
>>>alist[1::2] #偶数位置,隔一个取一个
[2,4,6,8]
>>>alist[3::] #从下标3开始的所有元素
[4,5,6,7,8]
>>>alist[3:6] #下标【3,6)之间的所有元素
[4,5,6]
>>>alist[0:100:1] #前100个元素,自动阶段
[1,2,3,4,5,6,7,8]
>>>alist[100:] #下标100之后的所有元素,自动截断
[]
>>>alist=[1,2,3,4,5]
>>>alist[len(alist):]=[0] #在尾部追加元素
[1,2,3,4,5,0]
>>>alist[:3]=[7,8,9] #替换前3个元素
[7,8,9,4,5]
>>>alist[:3]=[] #删除前3个元素
[4,5]
>>>alist[::2]=[0]*3 #替换奇数上的元素
[0,2,0,4,0]
>>>alist=[1,3,5,2,4,6]
>>>alist.sort()
[1,2,3,4,5,6]
>>>alist.sort(reverse=True)
[6,5,4,3,2,1]
>>>alist=[5,3,13,15,4,2]
>
>>>alist=[1,3,5,2,4,6]
>>>sorted(alist,reverse=True)
[6,5,4,3,2,1]
>>>alist=[1,3,5,2,4,6]
>>>alist.reverse()
[6,4,2,5,3,1]
>>>alist=[1,3,5,2,4,6] #一个列表alist
>>>reversed(alist)
<list_reverseiterator at 0x1eea1d3e588> #显示为一个迭代器对象的内存地址
>>>blist=reversed(alist) #一个对象blist
>>>print(list(blist))
[6,4,2,5,3,1]
>>>print(list(blist)) #再次输出对象blist
[] #显示为空列表
>>>sum(range(1,11)) #sum()函数的start参数默认为0
55
>>>sum(range(1,11),5) #指定start参数为5,等价于5+sum(range(1,11))
60
>>>alist=[1,2,3]
>>>blist=[4,5,6]
>>>zip(alist,blist) #返回zip对象
<zip at 0x1eea1d49288>
>>>clist=zip(alist,blist)
>>>list(clist) #把zip对象转换成列表
[(1, 4), (2, 5), (3, 6)]
>>>alist=['a','b','c']
>>>list(enumerate(alist))
[(0,'a'),(1,'b'),(2,'c')]
variable = [out_exp_res for out_exp in input_list if out_exp == x ]
out_exp_res: 列表生成元素表达式,可以是有返回值的函数。
for out_exp in input_list:迭代input_list将out_exp传入out_exp_res表达式中。
if out_exp == x: 根据条件过滤哪些值可以。
>>>alist=[i*2 for i in range(10) if i % 2 == 0]
>>> print(alist)
[0, 4, 8, 12, 16]
类型名称:tuple,定界符:圆括号(),不可变有序。
元组一旦定义就不允许更改,元组没有append(),extend(),和insert()等方法,无法向源诅中添加对象。
元组没有remove()或pop()方法,也无法对元组元素进行del操作。
元组的速度比列表更快。
>>>atuple=('a','z')
>>>atuple=(3)
3
>>>atuple=(3,) #包含一个元素的元组,最后必须多写个逗号
(3,)
>>>atuple=3, #也可以这样写
(3,)
>>>atuple=() #创建空元组
>>>tuple('abcd') #把字符串转换为元组
('a','b','c','d')
>>>tuple([1,2,3,4]) #把列表转换为元组
(1,2,3,4)
>>>atuple=tuple() #创建空元组
()
使用del可以删除元组对象,不能删除元组中元素。
生成器推导式的结果是一个生成器对象,使用生成器对象的元素时,可以根据需要将其转化为列表或元组,可以使用__next__()或者内置函数next()访问生成器对象.
(表达式 for 迭代变量 in 可迭代对象 if 条件表达式 )
>>>a = (x for x in range(1,10)) #创建生成器对象
'''>>>tuple(a) #将生成器对象转换为元组
(1, 2, 3, 4, 5, 6, 7, 8, 9)
>>>list(a) #生成器对象已经遍历结束,没有元素
[] '''
>>>for i in a:
print(i,end=' ')
1 2 3 4 5 6 7 8 9
>>>print(tuple(a))
(2, 3, 4, 5, 6, 7, 8, 9)
>>>a = (x for x in range(1,10))
>>>a.__next__() #使用生成器对象的__next__()方法获取元素
1
>>>a.__next__() #接着获取下一个元素
2
>>next(a) #使用函数next()获取生成器对象中元素
3
类型名称:dict,定界符:大括号{ },可变无序。
定义字典时,每个元素的键和值用冒号分隔,元素之间用逗号分隔,所有元素放在一堆大括号中。
字典中的键可以为任意不可变数据,如:整数,实数,复数,字符串,元组等。
>>>adict={'server':'python','database':'mysql'}
>>>adict={} #创建空字典
>>>adict=dict()
>>>key=['a','b','c']
>>>value=[1,2,3]
>>>adict=dict(zip(key,value))
{'a': 1,'b': 2, 'c': 3}
>>>adict=dict(name='Dong',age=37)
{'name': 'Dong', 'age': 37}
>>>adict=dict.fromkeys(['name','age','sex'])
{'name': None, 'age': None, 'sex': None}
>>>adict={'name':'dong','sex':'male'}
>>>adict['name']
'dong'
>>>adict.get('address')
None
>>>adict.get('address','SDIBT')
SDIBT
>>>adict['score']=adict.get('score',[])
>>>adict['score'].append(98)
>>>adict['score'].append(99)
{'score': [98, 99]}
>>>adict={'name':'dong','sex':'male','age':37}
>>>for dic in adict.items(): #输出字典所有元素
print(dic)
('name', 'dong')
('sex', 'male')
('age', 37)
>>>for dic in adict: #默认输出键
print(dic)
name
sex
age
>>>for key,value in adict.items(): #序列解包用法
print(key,value)
name dong
sex male
age 37
>>>adict={'name':'dong','sex':'male','age':37}
>>>adict.keys() #返回所有键
dict_keys(['name', 'sex', 'age'])
>>>adict={'name':'dong','sex':'male','age':37}
>>>adict.values() #返回所有值
dict_values(['dong', 'male', 37])
>>>adict['age']=30
>>>adict={'name':'dong','sex':'male','age':30}
>>>adict.update({'a':'a','b':'b'})
{'name': 'dong', 'sex': 'male', 'age': 30, 'a': 'a', 'b': 'b'}
>>>import collections
>>>adict=collections.OrderedDict()
>>>adict['a']=3
>>>adict['b']=5
>>>adict['c']=8
>>>adict
OrderedDict([('a', 3), ('b', 5), ('c', 8)])
{表达式 for 迭代变量 in 可迭代对象 if 条件表达式 }
>>>adict={'a':1, 'b':2, 'c':3}
>>>bdict={v:k for k, v in adict.items()}
>>>bdict
{1: 'a', 2: 'b', 3: 'c'}
类型名称:set,定界符:大括号{ },可变无序。
元素不可重复,集合中只能包含数字,字符串,元组等不可变类型的数据,而不能包含列表,字典,集合等可变类型的数据。
>>>aset={1,3}
>>>Aset=set() #创建空集合
>>>aset=set(range(8,14))
{8,9,10,11,12,13}
>>bset=set([0,1,2,3,0,1,2,3,7,8]) #自动去除重复
{0,1,2,3,7,8}
>>>aset={1,2,3,4}
>>>aset.remove(2)
{1, 3, 4}
>>>aset={1,2,3,4,5}
>>>bset={4,5,6,7,8}
>>>aset|bset #并集
{1,2,3,4,5,6,7,8}
>>>aset&bset #交集
{4,5}
>>>aset-bset #差集
{1,2,3}
>>>aset.union(bset) #并集
{1,2,3,4,5,6,7,8}
>>>aset.intersection(bset) #交集
{4,5}
>>>aset.difference(bset) #差集
{1,2,3}
>>>aset.symmetric_difference(bset) #对称差集
{1, 2, 3, 6, 7, 8}
>>>aset.issubset(bset) #是否为子集
False
>>>{3}&{4}
set()
>>>{3}.isdisjoint({4}) #两个集合交集为空,返回True
True
>>>x={1,2,3}
>>>y={1,2,5}
>>>z={1,2,3,4}
>>>x<y #比较包含关系
False
>>x<z #真子集
True
>>>{1,2,3}<={1,2,3} #子集
True
集合推导式跟列表推导式差不多,都是对一个列表的元素全部执行相同的操作,
但集合是一种无重复无序的序列。跟列表推到式的区别在于,结果中无重复。
>>> aset={i*2 for i in [1,1,2]}
>>> print(aset)
{2,4}
>>>a=1,2,3
(1,2,3)
>>>a,b,c=1,2,3
>>>a
1
>>>b
2
>>>c
3
>>> a, b, *c = 0, 1, 2, 3
>>> a
0
>>> b
1
>>> c
[2, 3]
>>> a, *b, c = 0, 1
>>> a
0
>>> b
[]
>>> c
1
>>>a,b,c=range(3)
>>>print(a,b,c)
0 1 2
>>>a,b,c= map(str, range(3))
>>>print(a,b,c)
0 1 2
>>>alist=[1,2,3,4]
>>>a,b,c,d=alist
>>>b
2
>>>a,b,c=sorted([1,3,5])
>>>b
3
>>>adict={'a':1,'b':2,'c':3}
>>>x,y,z=adict
>>>x,y,z
('a', 'b', 'c')
>>>x,y,z=adict.items()
>>>print(x,y,z)
('a', 1) ('b', 2) ('c', 3)
>>>keys = ['x','y','z','n']
>>>values = [1,2,3,4]
for k,v in zip(keys, values):
print(k,v)
x 1
y 2
z 3
n 4
>>>x = ['a','b','c']
>>>for i, v in enumerate(x):
print('the value on position {0} is {1}'.format(i,v))
the value on position 0 is a
the value on position 1 is b
the value on position 2 is c