- .gitignore
- 01.01 python 基础.ipynb
- 01.02 python 进阶.ipynb
- 01.03 机器学习常用的包.ipynb
- 01.04 Keras MNIST Playground.ipynb
- 02.01 基于搜索的问题求解(学生版).ipynb
- 02.01 基于搜索的问题求解.ipynb
- 02.02 决策树(学生版).ipynb
- 02.02 决策树.ipynb
- 02.03 回归分析(学生版).ipynb
- 02.03 回归分析.ipynb
- 02.04 贝叶斯分析(学生版).ipynb
- 02.04 贝叶斯分析.ipynb
- 02.05 神经网络学习(学生版).ipynb
- 02.05 神经网络学习.ipynb
- _overview.md
- data_sample.png
- essay1_ch.txt
- essay1_en.txt
- essay2_ch.txt
- essay2_en.txt
- essay3_ch.txt
- essay3_en.txt
- iris.csv
- mnist.npz
- model.png
- search.py
- SimHei.ttf
01.01 python 基础.ipynb @7439c2a — view markup · raw · history · blame
1.1 Python 基础¶
print ("hello world!")
1.1.2 数据类型¶
类型 | 例子 |
---|---|
整数 | -100 |
浮点数 | 3.1416 |
字符串 | 'hello' |
列表 | [1, 1.2, 'hello'] |
字典 | {'dogs': 5, 'pigs': 3} |
长整型 | 1000000000000L |
布尔型 | True, False |
元组 | ('ring', 1000) |
集合 | {1, 2, 3} |
使用type()
函数来查看变量类型:
a = 1
type(a)
在 Python 中运算是有优先级的,优先级即算术的先后顺序,比如“先乘除后加减”和“先算括号里面的”都是两种优先级的规则,优先级从高到低排列如下:
( )
括号**
幂指数运算* / // %
乘,除,整数除法,取余运算+ -
加减
a = 4
b = 3
print("加:", a + b)
print("减:", a - b)
print("乘:", a * b)
print("除:", a / b)
print('幂:', a ** b)
print('取余', a % b)
print('取商:', a // b)
常见的数学函数¶
绝对值:
abs(-12.4)
保留小数点位数:
round(21.6445, 2)
最大最小值:
print (min(2, 3, 4, 5))
print (max(2, 4, 3))
类型转换¶
浮点数转整型,只保留整数部分:
print (int(-3.32))
整型转浮点型:
print (float(1))
数值型转字符串:
str(1)
字符串转数字型:
int('1')
1.1.3 字符串¶
使用一对单引号' '
或者双引号" "
生成字符串。
s = "hello, world"
print (s)
s = 'hello, world'
print (s)
常见的操作¶
加法:
a = 'hello'
b = 'world'
a + b
乘法:
c = a * 3
c
分割:
s.split()
将字符串 s 按照空格(包括多个空格,制表符\t
,换行符\n
等)分割,并返回所有分割得到的字符串。
line = "1 2 3 4 5"
numbers = line.split()
print (numbers)
type(numbers)
连接:
与分割相反,s.join(sequence)
的作用是以 s
为连接符将序列 sequence
中的元素连接起来,并返回连接后得到的新字符串。
s = ' '
s.join(numbers)
替换:
s.replace(part1, part2)
将字符串 s
中指定的部分 part1
替换成想要的部分 part2
,并返回新的字符串。
s = "hello world"
s.replace('world', 'python')
大小写转换:
s.upper()
方法返回一个将 s
中的字母全部大写的新字符串。
s.lower()
方法返回一个将 s
中的字母全部小写的新字符串。
"hello world".upper()
s = "HELLO WORLD"
print (s.lower())
# 不会改变原来s的值
print (s)
字符串的长度:
len(s)
s = "hello"
s[0]
除了正向索引,Python 还引入了负索引值的用法,即从后向前开始计数,例如,索引 -1
表示倒数第 1
个元素:
s[-1]
单个索引大于等于字符串的长度时,会报错:
s[6]
分片¶
分片用来从序列中提取出想要的子序列,其用法为:
var[start_index: stop_index: step]
其范围包括 start_index
,但不包括 stop_index
,即 [start_index, stop_index)
, step
表示取值间隔大小,如果没有默认为1
。
s = "hello"
s[::2]
l = [1, 2.0, 'hello']
print (l)
空列表可以用 []
或者 list()
生成:
empty_list = []
empty_list
empty_list = list()
empty_list
列表的常见操作¶
长度:用 len
查看列表长度
l = [1, 2.0, 'hello']
len(l)
加法: 相当于将两个列表按顺序连接
a = [1, 2, 3]
b = [3.2, 'hello']
a + b
乘法:列表与整数相乘,相当于将列表重复相加
a * 3
索引和分片¶
列表和字符串一样可以通过索引和分片来查看它的元素。
索引:
a = [10, 11, 12, 13, 14]
a[0]
反向索引:
a[-1]
分片:
a[2:-1]
添加元素¶
append:向列表添加单个元素
l.append(ob)
将元素 ob
添加到列表 l
的最后。
a = [10, 11, 12]
a.append(11)
print (a)
append
每次只添加一个元素,并不会因为这个元素是序列而将其展开:
a = [10, 11, 12]
a.append(['a', 'b'])
print (a)
extend: 向列表添加序列元素
l.extend(lst)
将序列 lst
的元素依次添加到列表 l
的最后,作用相当于 l += lst
。
a = [10, 11, 12]
a.extend(['a', 'b'])
print (a)
insert: 插入元素
l.insert(idx, ob)
在索引 idx
处插入 ob
,之后的元素依次后移。
a = [10, 11, 12, 13, 11]
# 在索引 3 插入 'a'
a.insert(3, 'a')
print (a)
删除元素¶
del:根据下标进行删除
# 根据下标进行删除
a = [1002, 'a', 'b', 'c']
del a[0]
print (a)
pop:弹出元素
l.pop(idx)
会将索引 idx
处的元素删除,并返回这个元素。未指定 idx
时,默认为列表最后一个元素。
a = [1002, 'a', 'b', 'c']
a.pop()
print (a)
remove:根据元素的值进行删除
l.remove(ob)
会将列表中第一个出现的 ob
删除,如果 ob
不在 l
中会报错。
a = [1002, 'a', 'b', 'c', 'b']
a.remove("b")
print (a)
a = [10, 11, 12, 13, 11]
print (10 in a)
print (10 not in a)
用 index
查找某个元素在列表中的位置:
l.index(ob)
返回列表中元素 ob
第一次出现的索引位置,如果 ob
不在 l
中会报错。
a = [10, 11, 12, 13, 11]
a.index(11)
count
查找列表中某个元素出现的次数:
a = [10, 11, 12, 13, 11]
a.count(11)
修改元素¶
修改元素的时候,要通过下标来确定要修改的是哪个元素,然后才能进行修改
a = [10, 11, 12, 13, 11]
a[0] = "a"
a
排序¶
sort
方法将 list
按特定顺序重新排列,默认为由小到大,参数 reverse=True
可改为倒序,由大到小
# 从小到大排序
a = [10, 1, 11, 13, 11, 2]
a.sort()
print (a)
# 从大到小排序
a = [10, 1, 11, 13, 11, 2]
a.sort(reverse=True)
print (a)
如果不想改变原来列表中的值,可以使用 sorted
函数:
a = [10, 1, 11, 13, 11, 2]
b = sorted(a)
print ("a:",a)
print ("b:",b)
列表反向¶
l.reverse()
会将列表中的元素从后向前排列。
a = [10, 1, 11, 13, 11, 2]
a.reverse()
print (a)
如果不想改变原来列表中的值,可以使用分片:
a = [10, 1, 11, 13, 11, 2]
b = a[::-1]
print ("a:",a)
print ("b:",b)
1.1.6 字典¶
字典 dictionary
,在一些编程语言中也称为 hash
, map
,是一种由键值对组成的数据结构。
顾名思义,我们把键想象成字典中的单词,值想象成词对应的定义,那么——
一个词可以对应一个或者多个定义,但是这些定义只能通过这个词来进行查询。
Python 使用key: value
这样的结构来表示字典中的元素结构。
空字典¶
Python 使用 {}
或者 dict()
来创建一个空的字典:
a = {}
type(a)
a = dict()
type(a)
插入键值¶
a["one"] = "this is number 1"
a["two"] = "this is number 2"
a["three"] = "this is number 3"
a
注意:
1.字典的键必须是数字、字符串、元组等,不能是列表、字典、集合。
2.字典没有顺序:当我们 print
一个字典时,Python 并不一定按照插入键值的先后顺序进行显示,因为字典中的键本身不一定是有序的。
# 查看键值
a['one']
更新键值¶
a["one"] = "this is number 1, too"
a
get
方法¶
用键可以找到该键对应的值,但是当字典中没有这个键的时候,Python 会报错,这时候可以使用字典的 get
方法来处理这种情况,其用法如下:
d.get(key, default = None)
返回字典中键 key
对应的值,如果没有这个键,返回 default
指定的值(默认是 None
)。
a = {}
a["one"] = "this is number 1"
a["two"] = "this is number 2"
a.get("three", "undefined")
keys
方法,values
方法和items
方法¶
d.keys()
:返回一个由所有键组成的列表;
d.values()
:返回一个由所有值组成的列表;
d.items()
:返回一个由所有键值对元组组成的列表。
a = {}
a["one"] = "this is number 1"
a["two"] = "this is number 2"
a.keys()
a.values()
a.items()
1.1.7 元组¶
元组Tuple
也是个有序序列,但是元组是不可变的,用()
生成。
# 生成元组
a = ()
type(a)
生成只含有单个元素的元组时,采用下列方式定义:
# 生成元组
a = (1,)
type(a)
元组是不可变的,修改元组元素时会报错:
a = (10, 11, 12, 13, 14)
a[0] = 1
a
可以把元组转为列表:
a = (10, 11, 12, 13, 14)
b = list(a)
print(b)
type(b)
1.1.8 集合¶
之前看到的列表和字符串都是一种有序序列,而集合 set
是一种无序的序列。
因为集合是无序的,所以当集合中存在两个同样的元素的时候,Python 只会保存其中的一个(唯一性);同时为了确保其中不包含同样的元素,集合中放入的元素只能是不可变的对象(确定性)。
可以用set()
函数来显示的生成空集合:
a = set()
type(a)
也可以使用一个列表来初始化一个集合:
a = set([1, 2, 3, 1])
a
集合会自动去除重复元素 1
。
可以看到,集合中的元素是用大括号{}
包含起来的,这意味着可以用{}
的形式来创建集合:
a = {1, 2, 3, 1}
a
但是创建空集合的时候只能用set
来创建,因为在 Python 中{}
创建的是一个空的字典:
s = {}
type(s)
1.1.9 判断语句¶
基本用法¶
判断,基于一定的条件,决定是否要执行特定的一段代码,例如判断一个数是不是正数:
x = 0.5
if x > 0:
print ("Hey!")
print ("x is positive")
在这里,如果 x > 0
为 False
即x ≤ 0
,那么程序将不会执行两条 print
语句。
虽然都是用 if
关键词定义判断,但与 C,Java 等语言不同,Python不使用 {}
将 if
语句控制的区域包含起来。Python 使用的是缩进方法。同时,也不需要用 ()
将判断条件括起来。
上面例子中的这两条语句:
print("Hey!")
print("x is positive")
就叫做一个代码块,同一个代码块使用同样的缩进值,它们组成了这条 if
语句的主体。
不同的缩进值表示不同的代码块,例如:
x > 0
时:
x = 0.5
if x > 0:
print ("Hey!")
print ("x is positive")
print ("This is still part of the block")
print ("This isn't part of the block, and will always print.")
x < 0
时:
x = -0.5
if x > 0:
print ("Hey!")
print ("x is positive")
print ("This is still part of the block")
print ("This isn't part of the block, and will always print.")
在这两个例子中,最后一句并不是 if
语句中的内容,所以不管条件满不满足,它都会被执行。
一个完整的 if
结构通常如下所示(注意:条件后的 :
是必须要的,缩进值需要一样):
if <condition 1>:
<statement 1>
<statement 2>
elif <condition 2>:
<statements>
else:
<statements>
当条件 1 被满足时,执行 if
下面的语句,当条件 1 不满足的时候,转到 elif
,看它的条件 2 满不满足,满足执行 elif
下面的语句,不满足则执行 else
下面的语句。
对于上面的例子进行扩展:
x = 0
if x > 0:
print ("x is positive")
elif x == 0:
print ("x is zero")
else:
print ("x is negative")
elif
的个数没有限制,可以是1个或者多个,也可以没有。
else
最多只有1个,也可以没有。
可以使用 and
, or
, not
等关键词结合多个判断条件:
x = 10
y = -5
x > 0 and y < 0
not x > 0
x < 0 or y < 0
这里使用这个简单的例子,假如想判断一个年份是不是闰年,按照闰年的定义,这里只需要判断这个年份是不是能被 4
整除,但是不能被 100
整除,或者正好被 400
整除:
year = 1900
if year % 400 == 0:
print ("This is a leap year!")
# 两个条件都满足才执行
elif year % 4 == 0 and year % 100 != 0:
print ("This is a leap year!")
else:
print ("This is not a leap year.")
判断条件为 False
情况总结:¶
Python 不仅仅可以使用布尔型变量作为条件,它可以直接在 if
中使用任何表达式作为条件:
大部分表达式的值都会被当作 True
,但以下表达式值会被当作 False
:
- False
- None
- 0
- 空字符串,空列表,空字典,空集合
mylist = [3, 1, 4, 1, 5, 9]
if mylist:
print ("The first element is:", mylist[0])
else:
print ("There is no first element.")
修改为空列表:
mylist = []
if mylist:
print ("The first element is:", mylist[0])
else:
print ("There is no first element.")
while <condition>:
<statesments>
Python 会循环执行<statesments>
,直到<condition>
不满足为止。
例如,计算数字0
到100
的和:
i = 0
# 求和结果
total = 0
# 循环条件
while i < 100:
# 求和累加
total += i
# 变量递增
i += 1
# 打印结果
print (total)
之前提到,空容器会被当成 False
,因此可以用 while
循环来读取容器中的所有元素:
plays = ['Hamlet', 'Macbeth', 'King Lear']
while plays:
play = plays.pop()
print ('Perform', play)
循环每次从 plays
中弹出一个元素,一直到 plays
为空为止。
for
循环¶
for <variable> in <sequence>:
<indented block of code>
for
循环会遍历完<sequence>
中所有元素为止
上一个例子可以改写成如下形式:
plays = ['Hamlet', 'Macbeth', 'King Lear']
for play in plays:
print ('Perform', play)
使用 for
循环时,注意尽量不要改变 plays
的值,否则可能会产生意想不到的结果。
之前的求和也可以通过 for
循环来实现:
total = 0
for i in range(100):
total += i
print (total)
values = [7, 6, 4, 7, 19, 2, 1]
for i in values:
if i % 2 != 0:
# 忽略奇数
continue
print (i/2)
break
语句¶
遇到 break
的时候,程序会跳出循环,不管循环条件是不是满足:
command_list = ['start',
'process',
'process',
'process',
'stop',
'start',
'process',
'stop']
while command_list:
command = command_list.pop(0)
if command == 'stop':
break
print(command)
在遇到第一个 'stop'
之后,程序跳出循环。
else
语句¶
与 if
一样, while
和 for
循环后面也可以跟着 else
语句。
- 当循环正常结束时,循环条件不满足,
else
被执行; - 当循环被
break
结束时,循环条件仍然满足,else
不执行。
不执行 else
语句:
values = [7, 6, 4, 7, 19, 2, 1]
for x in values:
if x <= 10:
print ('Found:', x)
break
else:
print ('All values greater than 10')
执行 else
语句:
values = [11, 12, 13, 100]
for x in values:
if x <= 10:
print ('Found:', x)
break
else:
print ('All values greater than 10')