一.列表
a=[2,3,4,5]
b=['a','b','c']
list=['data','frog',4,6]
列表是python中最常用的数据类型,也可以称之为数组。python中的数组和数学上的数组,理解上可能有些不一样。数学中的数组一般都是数值型的元素,python列表中的元素,可以是同一个数值变量类型,比如都是int型,或者都是str型;也可是不一样的数值型变量类型,比如上述的list列表。甚至列表表中还可以嵌套另外一个列表:list2=['data','frog',[4,6],5,9]。列表的嵌套方式,可以创造多维或者更高维度的数组,在numpy和pandas库中的运用非常广泛。列表在numpy和pandas的实际运用中,还会有一些差别。numpy中主要是便于处理列表相关的科学计算过程,因此numpy中的列表一般是纯数值型的多,可以类比线性代数的矩阵。而在pandas中最常见的用DataFrame创建的二位列表,其中的元素一般都包含多种数据类型,即不单单只是数值型的列表,此处可以类比于EXCEL表格。
列表(list)、元组(tuple)、字典(dict)、集合(set)的区别:
都是序列,可以储存多种类型的数据。列表用[]创建,元组用()创建,而字典用{}以键值对的方式创建。集合通过{}或set()函数创建,但创建一个空集合必须用set()函数创建,而不能用{}创建,{}表示创建一个空字典。集合与列表的区别在于:集合无排序,无重复值,无索引。
二.添加列表元素
列表.insert(索引,数据)
列表.append(数据)
列表.extend(iterable)
insert可以指定索引,在该索引后插入元素,如果索引值过大,则在最后末尾插入元素。
append无需索引参数,直接在末尾插入一个元素,
extend表示在末尾插入列表中的元素。与append不同的是,append插入列表时,是把列表当一个元素加在末尾,而extend插入列表时,是把列表中的元素插入末尾。
a=[2,3,4,5]
list=['data','frog',4,6]
list.append(a)
list
输出结果:['data', 'frog', 4, 6, [2, 3, 4, 5]]
a=[2,3,4,5]
list=['data','frog',4,6]
list.extend(a)
list
输出结果:['data', 'frog', 4, 6, 2, 3, 4, 5]
有趣的一点是,如果在extend函数中直接传入一个多字符字符串,也会被当成是列表来处理:
a=[2,3,4,5]
list=['data','frog',4,6]
list.extend('data')
list
输出结果:['data', 'frog', 4, 6, 'd', 'a', 't', 'a']
此时正确的操作办法是需要把'data'这个字符串当成是一个元素放在列表中,extend才会把data当成一个元素插入列表:
a=[2,3,4,5]
list=['data','frog',4,6]
list.extend(['data'])
list
输出结果:['data', 'frog', 4, 6, 'data']
再看下用append的区别:
a=[2,3,4,5]
list=['data','frog',4,6]
list.append('data')
list.append(['data'])
list
输出结果:['data', 'frog', 4, 6, 'data', ['data']]
三.删除列表
del 列表[索引]
指定元素索引删除
列表.remove(数据)
删除元素值,如果有多个值,只删除第一个,如果删除的值不存在会报错
列表.pop()
也是指定索引删除,不指定索引则删除最后一个
列表.clear()
清空列表
list=['data','frog',4,6]
del list[0]
list
输出结果:['frog', 4, 6]
del 删除元素时,是按索引来删除,如果需要按删除某个数据,则可以用index函数来指定数据的索引值:
list=['data','frog',4,6]
del list[list.index('frog')]
list
输出结果:['data', 4, 6]
用remove()删除:
list=['data','frog',4,6]
list.remove(4)
list
输出结果:['data', 'frog', 6]
删除元素不存在时,报错:
list=['data','frog',4,6]
list.remove(9)
list
输出结果:ValueError: list.remove(x): x not in list
remove()删除时,只允许传一个数值:
list=['data','frog',4,6]
list.remove(4,6)
list
输出结果:TypeError: remove() takes exactly one argument (2 given)
list=['data','frog',4,6,7,6]
list.remove(['4','6'])
list
输出结果:ValueError: list.remove(x): x not in list
用pop()删除:
list=['data','frog',4,6]
list.pop()
list
输出结果:['data', 'frog', 4]
list=['data','frog',4,6,7,6]
list.pop(10)
list
输出结果:IndexError: pop index out of range
pop()和remove()一样,如果被删除的数据有多个索引值或有多个数据值,都只删除最后一个元素:
list=['data','frog',4,6,7,6]
list.pop(list.index(6))
list
输出结果:['data', 'frog', 4, 7, 6]
['data', 'frog', 4, 7, 6]
list=['data','frog',4,6,7,6]
list.remove(6)
list
输出结果:['data', 'frog', 4, 7, 6]
clear()删除:
list=['data','frog',4,6,7,6]
list.clear()
list
输出结果:[]
四.修改元素
直接指定元素索引重新赋值
list=['data','frog',4,6,7,6]
list[0]='1'
输出结果:['data',1,4,6,7,6]
五.元素排序
列表.sort(reverse=true/false)
sorted(列表,参数设置) sorted(iterable, cmp=None, key=None, reverse=False)
iterable:是可迭代类型;
cmp:用于比较的函数,比较什么由key决定;
key:用列表元素的某个属性或函数进行作为关键字,有默认值,迭代集合中的一项;
reverse:排序规则. reverse = True 降序 或者 reverse = False 升序,有默认值。
默认时按升序排列,字符串和数值不能一起排序,会报错
sort()和sorted()的区别:sort()会修改原数据,而sorted()不修改原数据
如果需要按列表内含数值的字符串排序,可以用正则表达式,设置参数,具体操作先遗留。。。。
如果需要按字符串排序。。。。。问题先遗留
import re
list= [ 'ch1.txt', 'ch10.txt', 'ch1.txt', 'ch3.txt', 'ch11.txt' ]
list.sort(key = lambda x:int(re.match('\D+(\d+)\.txt',x).group(1)))
list
输出结果:['ch1.txt', 'ch1.txt', 'ch3.txt', 'ch10.txt', 'ch11.txt']
用sorted函数与正则表达式排序:
import re
s = ['1.dat','10.dat','5.dat']
new = sorted(s,key = lambda i:int(re.match(r'(\d+)',i).group()))
new
输出结果:['1.dat', '5.dat', '10.dat']
六.查询数据
列表.index(数据)
列表.count(数据)
len(列表)
判断元素是否存在于列表:
if 数据 in 列表
在pandas 的DataFrame构建的列表中,可以直接用列表==数据来判断,直接返回一个bool值列表。该操作常常用于数据过滤与数据筛选。
拓展练习:加强结合正则表达式的元素排序练习