数据科学——Python入门知识

Python基础

数据类型

1.元组
元组是Python中的一种新的数据结构和列表类似但元组里的数据都是不可变的,但如果元素是列表等数据结构则可以改变

a_tuple = (1,2,3,4,5,6,9)
b_tuple = tuple(range(2,10,2))//参数是start end step
print(b_tuple)
print(a_tuple[-1])
print(a_tuple[0:6:2])
print(a_tuple[:-1])#返回的还是元组,此时操纵的是第二个元素
print(min(a_tuple))
print(a_tuple+b_tuple)#返回新元组
元组的元素的值不可改变,但元素如果是数组的话则可变

还有一点值得注意的是访问多个元组里的元素Python提供了切片,[number:number:number:]分别对用start,end,step,如果为start为-1则指向末尾

2.集合
集合和列表非常相似除了不能存在重复值以外,集合是无序的同类元素的集合
通常创建一个集合的语法

str_1 = "dogs chase cats"
str_2 = "dogs hate cats"
str_1_word = set(str_1.split(" "))
str_2_word = set(str_2.split(" "))
print(str_1_word)
print(str_2_word)
length_1_word = len(str_1_word)
length_2_word = len(str_2_word)

cmn_wrds = str_1_word.intersection(str_2_word)
print(cmn_wrds)
print(len(cmn_wrds))

unq_wrds = str_1_word.union(str_2_word)
print(unq_wrds)

以下是输出结果
输出结果

3.列表
因为我之前学过Js所以感觉这个列表和Js里的数组特别像,所以我并没有详细的去实验很多列表的函数,下面我就举几个和Js中的数组不一样的地方吧,还是贴代码~

# a = [1,2,-1,-2,3,4,-3,-4]
# b = [pow(x,2) for x in a if x<0]
# print(b)

# c = {'a':1,'b':2,'c':3}
# b = [pow(x,3) for y,x in c.items()]
# # y,x分别是key value
# print(b)

可能是写法不一样吧,基础的还是和JS的数组很像,这里我是用的a列表和c列表推导b列表,在b列表里面用的是生成器

4.迭代器、生成器和可迭代对象

什么是迭代器呢?下面我贴一个代码的例子来看

# list = [1,2,3,4]
# it = iter(list)
# print(it)#it并不是数组而是一个迭代器对象
# print(next(it))
# print(next(it))
# print(next(it))
# print(next(it))

这里我定义了一个列表,列表是一个迭代器,这里用iter是访问List内部的入口,调用next可以一步一步的访问List内的每个元素,这里没有深入的了解迭代器,深入了解的话请看这迭代器注意迭代器遍历一次后就不能再次遍历
什么是生成器呢?请看以下代码

simpleCounter = (x**2 for x in range(1,4))#返回一个生成器
print(simpleCounter)
tot = 0
for x in iter(simpleCounter):
    print(x)

前面已经提到了类似与第一行里的定义,就是一个生成器,iter()函数只是用来在循环体中循序访问元素
可以理解为iter()函数是访问生成器和迭代器里每一个元素的入口

可迭代对象和生成器两者才能制造一个迭代器,可迭代对象区别于迭代器可以无限次的遍历。下面贴出如何生成一个可迭代对象

class iterator(object):
    def __init__(self,start,end):
        self.start = start
        self.end = end
    def __iter__(self):
        for x in range(self.start,self.end):
            yield x**2

c = iterator(1,5)

for val in iter(c):
    print(val)
for val in iter(c):
    print(val)

5.装饰器
最后我们来谈谈python中比较重要的装饰器吧,我理解的装饰器是只能装饰一个函数,作用于函数的参数,作用后的参数在函数里执行 下面贴代码

from string import punctuation
def suqure_input(func):
    def to_lower(x):
        return x.lower()
    def to_text(x):
        for p in punctuation:
            x = x.replace(p, '')
        return x
    def wrapper(*args,**kwargs):
        x = to_lower(*args, **kwargs)
        x = to_text(x)
        return func(x)
    return wrapper
#装饰器只能装饰一个函数
@suqure_input
def take_text(Text):
    print(Text)
    return Text.split()

s = "String. With. Punctuation?"
print(take_text(s))

运行结果如下图
在函数执行之前就对函数参数进行了过滤
运行结果

6.Lambda匿名函数、filter、zip、sort函数
作者这里先提一下JS的匿名函数()=>{}和function()两种,匿名函数有很多实用的地方,作者经常在js里用的是函数表达式比如 fun = () => {} 这样fun就是一个函数 引申出立即执行函数 (()=> {})()在js里面
那么在Python里我这里认识到匿名函数经常用来对数据的筛选、过滤之类的

print(list(filter(lambda x:x>30,a)))

print(list(zip(range(1,5),range(1,5))))# zip函数接受两个参数把元素组合对应

v  = (6,5,3,2,31,5)
print(tuple(sorted(v))) #sorted函数是返回一个排序号的列表
print(v)

filter函数接受两个参数 (func,iterable)第一个是函数,第二个是可迭代对象 这里要提一点 迭代器属于可迭代对象,list是迭代器当然也是可迭代对象,注意区分匿名函数和列表推导
b = [pow(x,2) for x in a if x<0]
zip函数接受两个参数把元素组合对应
sorted函数是返回一个排序好的列表不对原列表操作 下面是运行结果
运行结果

好了好了,这是作者下午学的知识,虽然以前也或多或少学过这些,所以这里说明作者学习效率太低了,以后一步步写出高质量,高产的文章~~如果本文有什么不好的地方 请多多见谅~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值