本文内容摘自《Python数据分析与挖掘实战》。
目录
1.1 赋值、运算、输出
#1.基础操作
a = 20 # 赋值运算
a * 1 # 数学四则运算
a ** 2 # 幂运算,即a^2,a*a
a, b, c = 2, 3, 4 # 支持多重赋值
print('Hello World!') # 打印Hello World!
1.2 if-else 条件判断
# 条件判断if
if 1 == 2: # 如果 if 跟随的条件为 假 那么不执行属于if 的语句,然后执行 elif 或者 else
print("假的")
elif :
pass
else: # 寻找到 else 之后 执行属于else中的语句
print("1==2是假的")
# Python 一般不用花括号{},也不用end语句,而是使用缩进对齐作为语句的层次标记。
# 同一层次的缩进量一定要一一对应,不然会报错。
# 只能有一个if / else, elif可以有多个
# 如果条件判断很多,if-else写也很繁琐,其实也可以用字典实现
test = {'2': 'a=2',
'3': 'a=3',
'4': 'a=4',
}
a = 2
print(test.get(a,'默认输出')) # 如果a 的值在字典中不存在,则默认输出None,也可以修改默认输出(需要使用get函数)。
1.3 for / while 循环操作
# 循环操作---while
sum, n = 0
while n < 101: # 该循环过程用于求和计算 1+2+3+...+100
n = n + 1
sum = sum + n
print(sum)
# 循环操作---for
sum = 0
for i in range(101): # 该循环过程用于求和计算 1+2+3+...+100
sum = sum + i
print(sum)
# 关键字 in 作用:判断一个元素是否在列表/元组中存在。
# 关键字 range 作用:用来生成连续序列,
# 一般语法 range(a, b, c), 表示以 a 为首相、c 为公差且不超过 b-1 的等差数列。
s = 0
if s in range(4):
prinf("s 在[0,1,2,3]中")
if s not in range(1, 4, 1)
prinf("s 不在[1,2,3]中")
# break、continue
# break语句可以跳出 for 和 while 的循环体
n = 1
while n <= 100:
if n > 10:
break
print(n)
n += 1
# continue语句跳过当前循环,直接进行下一轮循环
n = 1
while n < 10:
n = n + 1
if n % 2 == 0:
continue
print(n)
1.4 函数定义及调用
Python 函数一定会有返回值,如果没有return,会返回None。
需要注意的是,Python 与一般编程语言不同的是,函数返回值可以使各种形式,比如返回列表,甚至返回多个值
# 函数定义及调用
def add(x):
return x+2
print(add(5)) # 输出结果为7
def add_2(x = 0, y = 0):
return [x+2, y+2]
def add_3(x, y):
return x+3, y+3
a, b = add_3(1, 2) # 此时 a=4, b=5
# 行内函数,又称匿名函数、拉姆达函数
f = lambda x :x + 2 # 定义 f(x) = x + 2
g = lambda x, y :x + y # 定义 g(x, y) = x + y
1.5 列表和元组
# 数据结构---List(列表)
# 列表是写在方括号 [] 之间、用逗号分隔开的元素列表。
# 列表元素可以是任何数据类型,
# 列表里面可以套列表
# 列表索引值以 0 为开始值,-1 为从末尾的开始位置。
list = ['abcd', 786 , 2.23, 'runoob', 70.2]
print(list[1:3])
# 列表可以使用 + 操作符进行拼接。
tinylist = [123, 'runoob']
print(list + tinylist)
# 列表中的内容可以被修改
list[0] = 'hello' # 原来的值 abcd 被修改为 hello
# 复制列表
# b = a # 错误,此乃引用,修改 b 的同时会修改 a
b = a[:] # 正确
# 数据结构---Tuple(元组)
# tuple与list类似,不同之处在于tuple的元素不能修改。tuple写在小括号里,元素之间用逗号隔开。
# 元组元素可以是任何数据类型,
# 元组里面可以套元组
# 元组的元素不可变,但可以包含可变对象,如list。
t1 = ('abcd', 786 , 2.23, 'runoob', 70.2) # 此处是(),而列表是[]
# 注意:定义一个只有1个元素的tuple,必须加逗号。
t2 = (1, )
t3 = ('a', 'b', ['A', 'B']) # 元组的元素不可变,但可以包含可变对象,如list。
t3[2][0] = 'X' # ['A', 'B'] -> ['X', 'B']
print(t3) # ('a', 'b', ['X', 'B'])
1.6 字符串、元组、列表的操作
字符串和元组不支持修改,即二次赋值。
#字符串、元组、列表,读取操作完全相同,拼接操作完全相同,可以相互转换,都可以做切片操作,都可以通过下标读取
str = '我是字符串'
list = ['我', '是', '列','表']
list = ('我', '是', '元','组')
# 读取
str[2]
list[2]
tuple[2]
# 拼接
str + str1
list + list2
tuple + tuple2
# 切片
str[1:4] #是字符,左包括,右不包括
list[1:3] #是列
tuple[1:3] #是元
str[1:] # 是字符串,去掉了第一个元素(下标0),
str[:-1] # 我是字符,去掉了最后一个元素(下标-1),右边不包括
str[-1:] # 串,取出最后一个元素
str[::-1] # 串符字是我,倒序输出
str[::-2] # ------------------------------------这个不知道是什么
str[:] # 复制一份,
# 原理:
# 当i缺省时,默认为0,即 a[:3]相当于 a[0:3]
# 当j缺省时,默认为len(alist), 即a[1:]相当于a[1:10]
# 当i,j都缺省时,a[:]就相当于完整复制一份a
# b = a[i:j:s] # 表示:i,j与上面的一样,但s表示步进,缺省为1.
# 所以a[i:j:1]相当于a[i:j]
# 当s<0时,i缺省时,默认为-1. j缺省时,默认为-len(a)-1
# 所以a[::-1]相当于 a[-1:-len(a)-1:-1],也就是从最后一个元素到第一个元素复制一遍,即倒序。
1.7 字典和集合
# 5.数据类型---dict(字典)
# 字典是无序的对象集合,使用键-值(key-value)存储,具有极快的查找速度。
# 键(key)必须使用不可变类型。
# 同一个字典中,键(key)必须是唯一的。
# 字典的创建和元素的访问
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
print(d['Michael'])
# list可以转成字典,但前提是列表中元素都要成对出现
dict3 = dict([('name','杨超越'),('weight',45)])
print(dict3)
#字典里的函数 items() keys() values()
dict5 = {'杨超越':165,'虞书欣':166,'上官喜爱':164}
print(dict5.items())
for key in dict5: #默认为key(),打印的都是key值,
print(key)
for value in dict5.values(): # 打印value值
print(key)
for key,value in dict5.items(): # key 和 value 都打印
print(key, value)
#5.数据类型---set(集合)
#set和列表类似,区别是:1、set是无序的且不可重复,重复元素在set中自动被过滤。2、不支持索引。
s = {1, 1, 2, 3} # 1会自动去重,实际得到{1, 2, 3}
s = set([1, 1, 2, 2, 3, 3]) # set函数将列表转换成集合,自动去重,实际得到{1, 2, 3}
# set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集(&)、并集(|)、差集(-)等操作。
1.8 函数式编程
1.8.1 lambda()
# 行内函数,又称匿名函数、拉姆达函数
f = lambda x :x + 2 # 定义 f(x) = x + 2
g = lambda x, y :x + y # 定义 g(x, y) = x + y匿名函数
1.8.2 map()
有了列表解析,为什么还要有map函数呢?
其实列表解析,虽然代码简短,但是本质上还是 for 命令,而Python的for命令效率不高,map函数不仅实现了相同的功能,而且效率高。