Python 有三个非常重要的特性,易上手,社区丰富,性能扩展方便。科学家们很早就喜欢用Python实验算法,也善于使用numpy做科学计算,用pyplot画数据图。但实际上人工智能的核心算法是完全依赖于C/C++的,因为是计算密集型,需要非常精细的优化,还需要GPU、专用硬件之类的接口,这些都只有C/C++能做到,某种意义上其实C/C++才是人工智能领域最重要的语言。Python是这些库的API binding,使用Python是因为CPython的胶水语言特性,要开发一个其他语言到C/C++的跨语言接口,Python是最容易的。各种原因,Python与人工智能成了CP。废话不多说, 开始学习python。

本文知识点

1

Python的数据类型

字符串、整数与浮点数、布尔值、日期时间,查看变量类型,类型转换

2

Python数据结构

列表、元组、集合、字典、互相转换

3

Python控制流

顺序、分支、循环、列表生成式

4

Python函数

调用函数、定义函数、高阶函数

1. Python的数据类型

1.1 字符串

在Python中用引号引起来的字符集称之为字符串,比如:'hello'、"my Python"、"2+3"等都是字符串 Python中字符串中使用的引号可以是单引号、双引号跟三引号。

print('单引号:', 'Hello world!')       # 单引号print("双引号:", "Hello world!")        # 双引号print('单双:', 'Hello "World"!')      # 单引号, 内部双引号就只是普通字符print('双单:', "Hello 'World'!")      # 双引号, 内部单引号就只是普通字符print( '三引号:',"""Hello world!""")   # 三引号

python 列转为日期格式 python 日期转数字_python统计字符个数

  • 转义字符

转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\表示的字符就是\

print ('It\'s a good tool!')            # '的转义  \'print ("hello world!\nhello Python!")   # 回车print ('\\\t\\')                        # 斜杠本身 和 Tabprint (r'\\\t\\')                       # 原样输出引号内的字符串引号前加r

python 列转为日期格式 python 日期转数字_python统计字符个数_02

  • 子字符串及运算

取子字符串有两种方法,使用[]索引或者切片运算法[:],这两个方法使用面非常广

s = 'Python'print( 'Py' in s)                      # in 的用法print( 'py' in s)                      #注意大小写print (s[2])                           #取字符串的方法,索引法print (s[1:4])                         #取字符串的方法,切片法######字符串的连接, 与格式化输出########word1 = '"hello"'word2 = '"world"'sentence = word1.strip('"') + ' ' + word2.strip('"') + '!'print( 'The first word is %s, and the second word is %s' %(word1, word2))print (sentence)

python 列转为日期格式 python 日期转数字_python 字符串转日期_03

1.2 整数与浮点数

Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样

7 + 3                               #加7 - 3                               #减7 * 3                               #乘7 / 3                               #除7 ** 2                              #乘方7 % 2                               #取余7 // 2                              #取整

其他几种运算, 另负责运算需要调用math

python 列转为日期格式 python 日期转数字_python 字符串转日期_04

1.3 布尔值

print('True and False:',True and False)      #And 运算print('True or False:',True or False)        #Or 运算print('True + False',True + False)           #加法print("18 >= 6 * 3 or 'py' in 'Python'", 18 >= 6 * 3 or 'py' in 'Python')

python 列转为日期格式 python 日期转数字_Python_05

1.4 日期时间

import timenow = time.strptime('2020-06-01', '%Y-%m-%d')print ('now:', now)print('strftime',time.strftime('%Y-%m-%d', now))  #根据指定的格式把一个时间字符串解析为时间元组import datetimesomeDay = datetime.date(2020,5,30)anotherDay = datetime.date(2020,6,1)deltaDay = anotherDay - someDay                  #时间的加减法print('deltaDay:',deltaDay.days)

python 列转为日期格式 python 日期转数字_python 列转为日期格式_06

1.5 查看变量类型

print(type(None))                         #None Typeprint(type(1.0))                          #Floatprint(type(1))                            #Intprint(type(False))                       #Booleanprint(type('1'))                          #String

python 列转为日期格式 python 日期转数字_python统计字符个数_07

1.5 类型转换

print(str(10086))        # 转字符串print(float(10086))      # 转浮点数print(int('10086'))      #字符 -> 整数print(complex(10086))    #创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。

python 列转为日期格式 python 日期转数字_python 字符串转日期_08

2 Python数据结构 (这个很重要*)

列表(list)、元组(tuple)、集合(set)、字典(dict)

2.1 列表(list)

用来存储一连串元素的容器,列表用[]来表示,其中元素的类型可不相同。仔细用代码实验。

mylist= [1, 2, 3, 4, 5 ,6]              #例子是从1开始, 而计数的索引从0开始print (mylist)# 索引从0开始,含左不含右print('[0]=',mylist[0])                      # 索引从0开始, 第0个数是1print ('[5]=', mylist[5])                    # 从左边数第五个数 是6,注意是索引从0开始的*print ('[-6]=', mylist[-6])                  # 从右边数第6个数 是1print ('[0:4]=', mylist[0:4])                # 从第一个数取到第四个, 含左不含右,索引从0开始print ('[:4]=', mylist[:4])                  # 默认左侧头开始print( '[4:]=', mylist[4:])                  # 默认从4取到结尾, 含左不含右,第4个数是5print ('[0:4:2]=', mylist[0:4:2])            # [start:end:step], 从第1个取到第4个,每步跳2个数print ('[::2]=', mylist[::2])                # [start:end:step], 从第开头取到第结尾,每步跳2个数print ('[-5:-1:]=', mylist[-5:-1:])          # 从右边取, 默认跳步为1print ('[-2::-1]=', mylist[-2::-1])          # 从右边第二个开始取, 取到最左边

python 列转为日期格式 python 日期转数字_python统计字符个数_09

List的操作:增删改,查找,统计

mylist[3] = "小月"                  # 修改, 把索引为3的, 修改为小月print (mylist[3])mylist[5]="小楠"                    # 修改, 把索引为5的, 修改为小楠print (mylist[5])print ('修改数据', mylist)          # 索引是从0开始mylist.append('han')                # 添加数据到尾部mylist.extend(['long', 'wan'])      # 添加数据print ('添加数据:', mylist)v1 = 'Inert_5'scores = [90, 80, 75, 66]mylist.insert(5,v1)                 #添加到第5个位置mylist.insert(1, scores)            #添加到第1个位置print(mylist)print( 'wan' in mylist)             #判断wan是否在列表中print ('han' not in mylist)         #判断han是否不在列表中print(mylist.count('wan'))          # count函数, 计算个数print(mylist.index('wan'))          # index函数, 返回索引位置print(mylist.pop(mylist.index('wan')))    #移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。print(mylist)

python 列转为日期格式 python 日期转数字_Python_10

2.2 元组(tuple)

元组类似列表,元组里面的元素也是进行索引计算。列表里面的元素的值可以修改,而元组里面的元素的值不能修改,只能读取。元组的符号是()。

scores = [90, 80, 75, 66]studentsTuple = ("ming", "jun", "qiang","ming", "wu", scores)print('Tuple:',studentsTuple)try:    studentsTuple[1] = 'fu'                        #元组的值不能修改except TypeError:    print ('TypeError')    scores[1]= 100                                     #socres为列表, 列表的值可以改print(studentsTuple)print("In or not:", 'ming' in studentsTuple)       #判断是否在元组中print('取数:', studentsTuple[0:3])                 #索引从0开始, 含左不含右print("Count:", studentsTuple.count('ming'))       #返回某个值的个数print("Index", studentsTuple.index('jun'))         #返回索引位置print("Len:", len(studentsTuple))                  #元组个数

python 列转为日期格式 python 日期转数字_python 列转为日期格式_11

2.3 集合(set)

Python中集合主要有两个功能,一个功能是进行集合操作,另一个功能是消除重复元素。集合的格式是:set(),其中()内可以是列表、字典或字符串,因为字符串是以列表的形式存储的。集合的基本运算函数如下:

# 集合的运算, 增 add(), 删remove() , 改 update()  , 交集、并集、差集studentsSet = set(mylist)print ('原:',studentsSet)studentsSet.add('xu')            #增: 增加值print ('增:',studentsSet)studentsSet.remove('xu')         #删: 删值print ('删:',studentsSet)a = set("abcnmaaaaggsng")        #去除重复的值print ('a=', a)b = set("cdfm")print ('b=', b)x = a & b                       #交集print( 'x=', x)y = a | b                       #并集print ('y=', y)z = a - b                       #差集print( 'z=', z)new = set(a)                    #会自动去除重复元素print( z)

python 列转为日期格式 python 日期转数字_python 字符串转日期_12

2.4 字典(dict)

Python中的字典dict也叫做关联数组,用大括号{}括起来,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度,其中key不能重复。

#字典dict, 定义, 显示, 增、删、改、查k = {"name":"weiwei", "home":"guilin"}print (k["home"])                      #返回固定key的,valueprint( k.keys())                       #显示所有的keysprint( k.values())                     #显示所有的值k["like"] = "music"                    #增:增加字典里的键值对k['name'] = 'guangzhou'                #改:修改字典里键对应的值print (k)k.pop('like')                          #删:删除对应的键值对print (k)print(k.get('edu', -1))                #查:通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value

python 列转为日期格式 python 日期转数字_python 列转为日期格式_13

3 Python控制流

在Python中通常的情况下程序的执行是从上往下执行的,而某些时候我们为了改变程序的执行顺序,使用控制流语句控制程序执行方式。Python中有三种控制流类型:顺序结构、分支结构、循环结构。

另外,Python可以使用分号";"分隔语句,但一般是使用换行来分隔;语句块不用大括号"{}",而使用缩进(可以使用四个空格)来表示。

3.1 顺序结构

s = '7'num = int(s) # 一般不使用这种分隔方式num -= 1 # num = num - 1 num *= 6 # num = num * 6print (num)

python 列转为日期格式 python 日期转数字_python 字符串转日期_14

3.2 分支结构:Python中if语句是用来判断选择执行哪个语句块的

if <True or Flase表达式>:    执行语句块elif <True or Flase表达式>:    执行语句块else:# 都不满足    执行语句块    # elif子句可以有多条,elif和else部分可省略
salary = 1000if salary > 10000:    print ("Wow!!!!!!!")elif salary > 5000:    print ("That's OK.")elif salary > 3000:    print ("5555555555")else:    print ("..........加油?")

python 列转为日期格式 python 日期转数字_python统计字符个数_15

3.3 循环结构

#while 循环while <True or Flase表达式>:    循环执行语句块else:# 不满足条件    执行语句块#else部分可以省略

python 列转为日期格式 python 日期转数字_python 列转为日期格式_16

# for循环for (条件变量) in (集合):    执行语句块    # “集合”并不单指set,而是“形似”集合的列表、元组、字典、数组都可以进行循环# 条件变量可以有多个heights = {'Yao':226, 'Sharq':216, 'AI':183}for i in heights:    print (i, heights[i])print('_'*20)    for key, value in heights.items():    print(key, value)   print('_'*20)      total = 0for i in range(1, 101):    total += i#total=total+iprint ('total:', total)

python 列转为日期格式 python 日期转数字_python 字符串转日期_17

3.4 break、continue和pass

break:跳出循环continue:跳出当前循环,继续下一次循环pass:占位符,什么也不做for i in range(1, 5):    if i == 3:        break                    #跳出循环    print (i)print('_'*20)   for i in range(1, 5):    if i == 3:        continue                 #跳出当前循环,继续下一次    print (i)    print('_'*20)   for i in range(1, 5):    if i == 3:        pass                     #占位, 什么也不做    print (i)

python 列转为日期格式 python 日期转数字_python 列转为日期格式_18

3.5 列表生成式

三种形式

  • [ for (条件变量) in (集合)]
  • [ for (条件变量) in (集合) if ]
  • [ if else for (条件变量) in (集合) ]
fruits = ['"Apple', 'Watermelon', '"Banana"']print('list1: ',[x.strip('"') for x in fruits])        #1个for,字符# 另一种写法test_list=[]for x in fruits:    x=x.strip('"')    test_list.append(x)print('list1: ',test_list)print('_'*40)   print('list2: ',[x ** 2 for x in range(21) if x%2])     #1个for,数字# 另一种写法test_list=[]for x in range(21):    if x%2:        x=x**2        test_list.append(x)print('list2: ',test_list)print('_'*40)   print('list3: ',[m + n for m in 'ABC' for n in 'XYZ'])   #2个for 字符# 另一种写法test_list=[]for m in 'ABC':    for n in 'XYZ':        x=m+n        test_list.append(x)print('list3: ',test_list)print('_'*40)   d = {'x': 'A', 'y': 'B', 'z': 'C' }print('list4: ',[k + '=' + v for k, v in d.items()])     #键值展示格式# 另一种写法test_list=[]for k, v in d.items():    x=k + '=' + v    test_list.append(x)    print('list4: ',test_list)

python 列转为日期格式 python 日期转数字_python 列转为日期格式_19

4 Python函数

函数是用来封装特定功能的实体,可对不同类型和结构的数据进行操作,达到预定目标。

4.1 调用函数

Python内置了很多有用的函数,我们可以直接调用,进行数据分析时多数情况下是通过调用定义好的函数来操作数据的。

str1 = "as"int1 = -9print (len(str1))print (abs(int1))fruits = ['Apple', 'Banana', 'Melon']fruits.append('Grape')print (fruits)

python 列转为日期格式 python 日期转数字_Python_20

4.2 定义函数

当系统自带函数不足以完成指定的功能时,需要用户自定义函数来完成。

def 函数名():    函数内容    函数内容    <return 返回值> def my_abs(x):    if x >= 0:        return x    else:        return -x    my_abs(-9)# 可以没有returndef filter_fruit(someList, d):    for i in someList:        if i == d:            someList.remove(i)        else:            passprint (filter_fruit(fruits, 'Melon'))print (fruits)#返回多个值的情况def test(i, j):    k = i * j    return i, j, ka , b , c = test(4, 5)print (a, b , c)type(test(4, 5))

4.3 高阶函数

把另一个函数作为参数传入一个函数,这样的函数称为高阶函数。

函数本身也可以赋值给变量,函数与其它对象具有同等地位。

myFunction = absmyFunction(-9)#参数传入函数def add(x, y, f):    return f(x) + f(y)add(7, -5, myFunction)#*重要 :map/reduce: map将传入的函数依次作用到序列的每个元素,#并把结果作为新的list返回;reduce把一个函数作用在一个序列[x1, x2, x3...]上,#这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算myList = [-1, 2, -3, 4, -5, 6, 7]map(abs, myList)from functools import reducedef powerAdd(a, b):    return pow(a, 2) + pow(b, 2)reduce(powerAdd, myList) # 是否是计算平方和?#filter: filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素def is_odd(x):    return x % 3  # 0被判断为False,其它被判断为Truefilter(is_odd, myList)#sorted: 实现对序列排序,默认情况下对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1#默认排序:数字大小或字母序(针对字符串)sorted(myList)#返回函数: 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回def powAdd(x, y):    def power(n):        return pow(x, n) + pow(y, n)    return powermyF = powAdd(3, 4)myFmyF(2)#匿名函数:高阶函数传入函数时,不需要显式地定义函数,直接传入匿名函数更方便f = lambda x: x * xf(4)#等同于def f(x):    return x * xmap(lambda x: x * x, myList)#匿名函数可以传入多个参数reduce(lambda x, y: x + y, map(lambda x: x * x, myList))#返回函数可以是匿名函数def powAdd1(x, y):    return lambda n: pow(x, n) + pow(y, n)lamb = powAdd1(3, 4)lamb(2)

其他:

  • 标识符第一个字符只能是字母或下划线,第一个字符不能出现数字或其他字符;标识符除第一个字符外,其他部分可以是字母或者下划线或者数字,标识符大小写敏感,比如name跟Name是不同的标识符。
  • Python规范:
  • 类标识符每个字符第一个字母大写;
  • 对象\变量标识符的第一个字母小写,其余首字母大写,或使用下划线'_' 连接;
  • 函数命名同普通对象。

关注我, 一步步从基础学