数据挖掘之路-Python基础

1.Python中的语言语义

1.1 变量和参数传递

在Python中对一个变量赋值时,你就创建了一个指向等号右边对象的引用。
※当你将对象作为参数传递给一个函数时,指向原始对象的新的变量名字会自动创建(就是你起的那个函数参数名字),注意这个过程仍旧是起别名。
通俗点理解,python将值储存起来,然后通过将变量名指向这些值的方式来定义变量。
最简单的,创建a=1,那么内存(不知道是不是内存)会首先把1存起来,然后创建一个a指向这个1,然后我们再创建b=a,这时b也会指向a所知的那一块内存。
此时,如果a指向的内存存储的是可变对象,比如列表,字典,numpy数组,那么你对a操作就是在对这块内存里的对象进行操作,如下。同时需要注意,这里经常有一个误区,就是把对a的所有操作都当做对这块内存里的对象进行操作。但其实不是的,比方说你又对a进行赋值操作,那么此时a只是指向了另一块内存而已,原来指向的内存中的内容并没有因此而改变。

def change(a):
  a.append(2)
a=[ 1 ]
change(a)
print(a)
#结果
[1, 2]

但如果你指向的是一个不可变对象,比如常见的标量类型(注意str也是不可变的!),那么你根本不可能对其做任何改变的操作,原来内存里的内容自然就不会改变了。

1.2 鸭子类型

为了让自己编写的函数可以接受任意序列类型,可采用下列判别方法。

#接受任意类型,并将其转化为列表
def isiterable(a):
    try:
        iter(a)
        return True
    except TypeError:
        return False
def change_kind_to_list(a):
    if not isinstance(a,list):
        if isiterable(a):
            return list(a)
        else:
            l=[]
            l.append(a)
            return l
    else:
        return a
a=change_kind_to_list({"xixi":1,"hh":2})
print(a)
['xixi', 'hh']

1.3 日期和时间

python中内建的datetime模块,提供了datetime、date和time类型。

#日期和时间
from datetime import *
dt=datetime(2021,4,15)
print(dt.day)#15
print(dt.strftime('%Y年%m月%d日,星期%w'))
2021年04月15日,星期4
类型描述
%Y四位的年份
%y两位的年份
%m两位的月份
%d两位的天数
%H小时值,24小时制
%I小时值,12小时制
%M两位的分钟值
%S秒值,范围0~61(60,61用于区分闰秒)
%w星期几
%U一年中第几个星期,星期天是每周第一天,第一个星期天前的一周是第0星期
%W一年中第几个星期,星期一是每周第一天,第一个星期一前的一周是第0星期
%F%Y-%m-%d的简写
%D%m/%d/%y的简写

1.4 控制流

1.range(开始,结尾,步长),生成的列表不包含结尾。
2.三元表达式(跟c++里的:?差不多),可嵌套。

#三元表达式
a=1 if 1>2 else 2
print(a)
2

2.Python中的内建数据结构、函数及文件

2.1 元组

2.1.1 元组拆包

#完成交换
a,b=1,2
b,a=a,b

引入的功能*rest,rest部分是你想丢弃的数据,rest可以是任意名字,通常也用下划线_来表示不想要的变量

values=[1,2,3,4]
a,b,*_=values

2.1.2 元组方法

列表也可用,统计元素出现个数.count().

2.2 列表

2.2.1 enumerate

python中的enumerate函数返回(i,value)元组的序列,其中value是元素的值,i是元素的索引。

for i,v in enumerate(collection):
    #使用值做些啥

2.2.2 sorted

sorted函数返回一个根据任意序列中元素新建的已排序列表。

2.2.3 zip

zip将列表、元组或其他序列的元素配对,新建一个元组构成的列表

seq1=['f','b','d']
seq2=[1,2,3]
zipped=zip(seq1,seq2)
print(zipped)#<zip object at 0x000001DC85659E80>
print(list(zipped))#[('f', 1), ('b', 2), ('d', 3)]

注: Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。基本语法是通过 {} 和 : 来代替以前的 % 。format 函数可以接受不限个参数,位置可以不按顺序。

>>>"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
'hello world'

也可以设置参数:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))
 
# 通过字典设置参数
site = {"name": "菜鸟教程", "url": "www.runoob.com"}
print("网站名:{name}, 地址 {url}".format(**site))
 
# 通过列表索引设置参数
my_list = ['菜鸟教程', 'www.runoob.com']
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是必须的

2.3 字典

2.3.1 从序列中生成字典

  1. 由于字典本质上是2-元组(含有两个元素的元组)的集合,字典是可以接受一个2-元组的列表作为参数的。
map=dict(zip(range(5),reversed(range(5))))
  1. 字典的get方法可以设置无关键字时返回的默认值。
Value=sdict.get(key,defaut_value)
  1. 字典的值可以是任何python对象,但键必须是不可变的对象,比如标量类型。

2.4 集合

2.4.1 集合特性

集合是一种无序且元素唯一的容器,集合有两种创建方式:通过set函数或者使用字面值集与大括号的语法。

2.4.2 集合方法

集合支持数学上的集合擦欧总,例如联合、交集、差集、对称差集。下面列举几个常见的操作。

函数描述
a.add(x)将元素x插入到集合a中
a.clear()清空集合a
a.remove(x)将元素x从a中移除
a.union(b)a和b两集合的并集
a.update(b)将a设置为a和b的并集
a.intersection(b)a和b的交集
a.intersection_update(b)将a设置为a和b的交集

2.5 列表、集合和字典的推导式

  1. 基础款
L=[x for x in range(5) if x>2]#列表推导式
D={k:v for k,v in zip(range(5),reversed(range(5))) if v<4}#字典推导式
#集合推导式看起来与列表一样,只不过把[]换成了{}
  1. 升级款-嵌套列表生成式
L=[x for tup in some_examples for x in tup ]

这里需要注意,列表推导式的for循环部分是根据嵌套的顺序排列的。

L=[[x in tup] for tup in some_examples]#这样生成的就是嵌套列表,形如[[1,2],[3,2]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值