zoukankan      html  css  js  c++  java
  • Python基本数据类型与数据结构(数据挖掘学习)

    前言

    最近工作和研究涉及到数据挖掘和机器学习,出于归纳和总结知识的目的写下这一系列的文章,这一系列文章将会包括Python的基本数据类型和数据结构,函数和面向对象相关的知识,然后会介绍数据挖掘和机器学习经常用到的Numpy,Pandas。也希望这一系列文章能够帮助刚刚接触Python或者数据挖掘和机器学习的人。

    基本数据类型

    数字

    Python中将带小数点的数都当作浮点数处理,对于加减乘除的基本操作与其他语言没有什么差别。

    字符串

    与绝大多数语言相同,Python也是通过“”来声明字符串。

    poet = "We are all in the gutter, but some of us are looking for stars"
    print(poet);
    复制代码

    字符串对空格敏感,不会主动去除空格,我们可以通过lstrip和strip来去除字符串左边和两端的字符串。

    name = " Python"
    name1 = " Python "
    
    print(name.lstrip())
    print(name1.strip())
    复制代码

    Python也是通过+来连接字符串

    name = "hello"+" Python"
    print(name.lstrip())
    复制代码

    需要注意的是Python与其他语言如Java不同的地方在于在拼接字符串时python不会主动将其他类型转化为字符串类型,需要自己手动转换,否则会报错如下

    age = 23
    message = "Happy" + age + "rd Birthday"
    print(message.lstrip())
    
    # 报错
    TypeError: can only concatenate str (not "int") to str
    Traceback (most recent call last):
      File "D:/Program Files/project/hello.py", line 3, in <module>
        message = "Happy" + 23 + "rd Birthday"
    TypeError: can only concatenate str (not "int") to str
    
    复制代码

    必须改为

    age = 23
    message = "Happy" + str(age) + "rd Birthday"
    print(message.lstrip())
    复制代码

    列表

    列表基础

    列表是由一系列按特定顺序排列的元素组成,可以由[]来声明一个列表。

    names = ["Python", 'Java', 'C++']
    复制代码

    Python列表访问元素和修改元素与一些语言中的数据相类似,通过下标来访问和修改元素且下标从0开始。

    names[0] = 'go'
    复制代码

    可以通过append来在列表尾添加元素

    names.append('C')
    复制代码

    通过insert来在特定位置插入元素

    names.insert(0, 'Ruby')
    复制代码

    list删除元素有很多种方法,可以使用del来删除元素。

    del names[0]
    复制代码

    也可以使用pop来删除元素

    names.pop(0)
    复制代码

    前面两种都是根据位置来删除元素,可以用remove根据值来删除元素,需要注意的是,remove只会删除一个值,如果列表中有多个相同值则需要调用多次。

    names.remove('Java')
    复制代码

    列表的排序:可以用sort使列表永久排序,可以通过传递参数reverse = True来倒着排序。

    nums = [1, 9, 7, 5, 4, 3, 2]
    nums.sort(reverse=True)
    复制代码

    sort会永久改变列表,如果只是想临时排序可以使用sorted。

    nums = [1, 9, 7, 5, 4, 3, 2]
    print(sorted(nums))
    复制代码

    可以使用reverse来使列表倒转

    nums = [1, 9, 7, 5, 4, 3, 2]
    nums.reverse()
    print(nums)
    复制代码

    可以用len来获取列表的长度

    len(nums)
    复制代码

    为了避免在访问列表时越界,Python以-1来表示最后一个元素,-2为倒数第2个,以此类推

    nums[-1]
    复制代码

    列表操作

    我们可以使用for in语句来遍历列表,需要注意在Python中使用:和缩进来代替其他语言中常用的{}来表示语句块,这也是Pyhthon的一个特色。

    names = ["Python", 'Java', 'C++', 'go', 'Ruby']
    for item in names:
        print(item)
    复制代码

    我们还可以使用range函数来生成一组数字,range(1, 5)会返回1, 2, 3, 4,同时range还可以设置步长,range(1, 5, 2)会返回1, 3。

    for i in range(1, 5, 2):
        print(i)
    复制代码

    可以利用list加range构造一个数字列表,可以使用min,max,sum求数字列表的最小值,最大值和和。

    nums = list(range(1, 5))
    print(max(nums))
    print(min(nums))
    print(sum(nums))
    复制代码

    我们还可以通过列表解析来创建列表,如下,Python中**表示乘方运算。

    squares = [value**2 for value in range(1, 5)]
    复制代码

    等价于

    squares = []
    for value in range(1, 5):
        squares.append(value**2)
    复制代码

    Python可以通过切片来获取列表的一部分。

    names = ["Python", 'Java', 'C++', 'go', 'Ruby']
    print(names[1:3])
    # 返回['Java', 'C++']
    复制代码

    [1:3]有点像以前数学的区间,右边是开区间,[1:3]就是【1,3)就是1,2。

    元组

    元组就是一种特殊的列表,声明之后就无法更改,可以通过()声明。

    names=('java', 'python')
    复制代码

    字典

    列表是有序的,通过位置来访问元素,而字典是无序,通过键值对来存储和访问元素,可以通过{}来声明字典。

    D = {}
    D = {'egg': 1, 'ham': 2}
    复制代码

    字典是可以嵌套的

    D ={'food': {'egg': 1, 'ham': 2}}
    复制代码

    字典可以通过keys,values和items来获取键,值和键+值。

    D = {'egg': 1, 'ham': 2}
    print(D.keys())
    print(D.values())
    print(D.items())
    复制代码

    通过get来根据键来获取键对应的值。

    D = {'egg': 1, 'ham': 2}
    print(D.get('egg'))
    复制代码

    通过键来新增或更改字典

    D = {'egg': 1, 'ham': 2}
    D['egg'] = 2
    print(D)
    复制代码

    通过del和pop来删除元素

    D = {'egg': 1, 'ham': 2}
    del D['egg']
    D.pop('ham')
    复制代码

    通过update来合并两个字典

    D1 = {'bread': 3}
    D = {'egg': 1, 'ham': 2}
    D.update(D1)
    print(D)
    复制代码

    通过len来获取字典长度

    D = {'egg': 1, 'ham': 2}
    print(len(D))
    复制代码

    最后

    简单介绍了Python的数据结构,内容很简单,不过最好还是自己动手敲一遍,纸上得来终觉浅。


    作者:月下西楼
    链接:https://juejin.im/post/6892383755341758477
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    .NET基础之:i++和i=i+1和++i的区别
    几个缩写
    下一步工作的一些思考和问题
    显著提高应变的定位精度和颗粒大小
    两个使用的Ajax Demo
    SQL Service查询分析
    自学面向对象
    支持定位当前页,自定义排序的分页SQL(拒绝动态SQL)
    WCF学习经验分享,如何更好地学习WCF?
    Custom DataContractSerializerOperationBehavior
  • 原文地址:https://www.cnblogs.com/lyck/p/13944873.html
Copyright © 2011-2022 走看看