作为一名即将合格的程序员,不仅要掌握那些纷繁复杂、眼花缭乱、晦涩难懂的算法和编程技巧,对于数据的构建、操作、转移、存贮等等操作也是吃饭必备之技巧。
本系列就是要对Python在数据处理中经常用的列表(list)、元组(tuple)、字典(dictionary)、array(数组)-numpy、DataFrame-pandas 、集合(set)等数据形式的特征、常用操作进行详述。
今天,开启本系列的第一篇文章---Python数据系列(一)-列表List:Python的“苦力”。
一、列表具有如下的特点:
-
一组有序项目的集合,可变的数据类型【可进行增删改查】
-
列表是以方括号“[]”包围的数据集合,不同成员以“,”分隔。
-
列表中可以包含任何数据类型,也可包含另一个列表,不需要具有相同的类型
-
列表可通过序号访问其中成员
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
>>> list1=[1,2,3,4,5]
>>> list1
[1, 2, 3, 4, 5]
>>> list2=[12,"kkk",["12","bb"]]
>>> list2
[12, kkk, [12, bb]]
>>>
二、基本的列表操作符
>>> list1=[1,2,3,4,5]
>>> list1[1] # 取序列为1的元素
2
>>> list1[-1] # 取最后一个序列的元素
5
>>> len(list1) # 列表的长度
5
>>> list2=[4,5,6,7,8]
>>> list1+list2 # 组合列表
[1, 2, 3, 4, 5, 4, 5, 6, 7, 8]
>>> list3=["hello world"]
>>> list3*3 # 重复列表
[hello world, hello world, hello world]
>>> 7 in list1 # 判断元素7是否在列表中
False
>>> 7 in list2
True
>>> for e in list1:# 打印列表内所有元素
... print(e)
...
1
2
3
4
5
>>> max(list1) # 取列表最大元素
5
>>> min(list1) # 取列表最小元素
1
>>> list1.index(2) # 列表中找出某个元素第一个匹配项的索引位置
1
>>> sum(list1) # 求列表内所有元素的和
15
>>> sum(list1)/len(list1) # 求列表内所有元素的平均值
3.0
>>> list4=[1,2,3,5,6,1,23,5,6]
>>> set(list4) # 去列表集合,去除重复元素
{1, 2, 3, 5, 6, 23}
>>> len(set(list4)) # 集合元素的数量
6
>>> list1.append(15) # 列表增加元素15
>>> list1
[1, 2, 3, 4, 5, 15]
>>> list4.count(1) # 统计某个元素在列表中的数量
2
>>> list4.extend(list1) # 在列表末尾一次性追加两一个序列
>>> list4
[1, 2, 3, 5, 6, 1, 23, 5, 6, 1, 2, 3, 4, 5, 15]
>>> list4+list1 # extend与列表组合的对比
[1, 2, 3, 5, 6, 1, 23, 5, 6, 1, 2, 3, 4, 5, 15, 1, 2, 3, 4, 5, 15]
>>> list4.pop(1) # 移除并返回该序列的元素
2
>>> list4
[1, 3, 5, 6, 1, 23, 5, 6, 1, 2, 3, 4, 5, 15]
>>> list4.remove(5) # 移除列表中某元素的第一个匹配项
>>> list4
[1, 3, 6, 1, 23, 5, 6, 1, 2, 3, 4, 5, 15]
>>> list4.reverse() # 列表取反
>>> list4
[15, 5, 4, 3, 2, 1, 6, 5, 23, 1, 6, 3, 1]
>>> list4.sort() # 列表从小到大排序
>>> list4
[1, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 15, 23]
>>> list4[3:6] # 取列表某一区间元素,左闭右开
[2, 3, 3]
>>> list4[3:] # 取列表某一元素到最后一个元素
[2, 3, 3, 4, 5, 5, 6, 6, 15, 23]
>>> list4[:3] # 取列表从0到某一区间元素
[1, 1, 1]
>>> list4[:] # 取列表所有元素
[1, 1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 15, 23]
>>> list4[3:10:2] # 取列表某一区间元素,第三个参数为步长,左闭右开
[2, 3, 5, 6]
>>> list4[::-1] # 倒序输出
[23, 15, 6, 6, 5, 5, 4, 3, 3, 2, 1, 1, 1]
>>> list4[3:6]=[22,22,22] # 替换列表指定元素
>>> list4
[1, 1, 1, 22, 22, 22, 4, 5, 5, 6, 6, 15, 23]
>>> list5=[12,"kkk",["12","bb"]] # 列表内元素的多种形式
>>> list5[2]
[12, bb]
>>> list5[2][1]
bb
# 统计某一元素出现的次数
>>>b=[5,5,4,5,3]
In [13]: b.count(5)
Out[13]: 3
三、查找列表中重复元素的个数
mylist = [1,2,2,2,2,3,3,3,4,4,4,4]
myset = set(mylist)
for item in myset:
print("the %d has found %d" %(item,mylist.count(item)))
参考链接:Python3学习(四十二):查找列表中重复元素的个数_技术宅拯救世界-CSDN博客
四、python返回一个列表中出现次数最多的元素(众数)
法1:
print(max(lt, key=lt.count))
法2:
def getVote(lst):
"""
投票原则,
1.少数服从多数,
2.存在相同的投票时候,均值向上取整
:param lst:
:return:
"""
list_set = set(lst)
frequency_dict = {}
for i in list_set: # 遍历每一个list的元素,得到该元素何其对应的个数.count(i)
frequency_dict[i] = lst.count(i) # 创建dict; new_dict[key]=value
grade_mode = []
for key, value in frequency_dict.items(): # 遍历dict的key and value。key:value
if value == max(frequency_dict.values()):
grade_mode.append(key)
if len(grade_mode) != 1:
res = round(np.mean(grade_mode))
else:
res = grade_mode[0]
return res
五、list中删除包含特定值的所有列表元素
while "normal" in list_pred_classes_slice:
list_pred_classes_slice.remove("normal")
六、寻找字典中最大value对应的key
d = {'a': 1, 'b': 2}
# 遍历d时,得到的是字典的key,然后将key对应的value设置为比较的对象
res = max(d, key=lambda x: d[x])
print(res) # b
print("ok")
七、python中str,int,list,list(str),list(int)的相互转换
地址:python中str,int,list,list(str),list(int)的相互转换_静幽水-CSDN博客
八、Lambda匿名函数
Python 不是纯萃的函数式编程语言,但本身提供了一些函数式编程的特性,像 map、reduce、filter等都支持函数作为参数,lambda 函数函数则是函数式编程中的翘楚。
Lambda 函数又称匿名函数,在某种意义上,return语句隐含在lambda中。和其他很多语言相比,Python 的 lambda 限制很多,最严重的是它只能由一条表达式组成。lambda规范必须包含只有一个表达式,表达式必须返回一个值,由lambda创建一个匿名函数隐式地返回表达式的返回值。
在PySpark 中经常会用到使用Lambda 的操作,例如:
li = [1, 2, 3, 4, 5]
### 列表中国年的每个元素加5
map(lambda x: x+5, li)
### 返回其中的偶数
filter(lambda x: x % 2 == 0, li) # [2, 4]
### 返回所有元素的乘积
reduce(lambda x, y: x * y, li)
# 取众数
import numpy as np
import pandas as pd
lst = [4,5,3]
def mode_lst1(lst):
num = np.array(lst)
ser = pd.Series(num)
getMode=ser.mode()
return getMode[0]
def mode_lst2(lst):
mode_num = max(lst, key=lst.count)
return mode_num
print('mode_lst1:', mode_lst1(lst))
print('mode_lst2:', mode_lst2(lst))
lambda 可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。
本质上,Lambda 函数是一个只与输入参数有关的抽象代码树片段。在很多语言里,lambda 函数的调用会被套上一层接口,还会形成闭包,在 lambda 函数构造的同时就可以完成,之后 lambda 函数内部就是完全静态的。而一般的函数还要加上存储局部变量的区域,对外部环境的操作,以及命名,大部分语言强制了一般函数必须与名字绑定。
九、过滤序列元素
最简单的过滤序列元素的方法就是使用列表推导。比如:
>>> mylist = [1, 4, -5, 10, -7, 2, 3, -1]
>>> [n for n in mylist if n > 0]
[1, 4, 10, 2, 3]
>>> [n for n in mylist if n < 0]
[-5, -7, -1]
>>>
使用列表推导的一个潜在缺陷就是如果输入非常大的时候会产生一个非常大的结果集,占用大量内存。
有时候,过滤规则比较复杂,不能简单的在列表推导或者生成器表达式中表达出来。 比如,假设过滤的时候需要处理一些异常或者其他复杂情况。这时候你可以将过滤代码放到一个函数中, 然后使用内建的 filter()
函数。示例如下:
values = ['1', '2', '-3', '-', '4', 'N/A', '5']
def is_int(val):
try:
x = int(val)
return True
except ValueError:
return False
ivals = list(filter(is_int, values))
print(ivals)
# Outputs ['1', '2', '-3', '4', '5']
上述对list列表的基本操作,大体上包含了在日常学习工作中最常用到的操作形式。希望上述的整理能够对你接下来的学习有所帮助。更多关于Python的操作,可进入公众号(小白CV),点击“历史信息”,查看更多精彩文章。
本系列下一篇文章,我们探讨一下字典(dictionary),这是一个拥有比list更加强大功能的数据形式。
往期回顾