前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

py三

原创
作者头像
黑兔
发布2023-02-22 10:48:47
5900
发布2023-02-22 10:48:47
举报
文章被收录于专栏:羊了个羊

字典,元组是可以作为建,列表只能作为值

d = {("name",):"jack", "age":"18", "sex":"male"}

print(d)

print(d"age")

print(d.keys())

print(d.values())

print(type(d.values()))

isinstance(d.values(), list)

isinstance(d.values(), object)

print(d.items()) #返回键值元组list

print(d.get("sex"))

print(d.get("se"))

print(d.popitem())

print(d)

print(d.pop("age"))

print(d)

代码语言:txt
复制
    {('name',): 'jack', 'age': ['18'], 'sex': 'male'}
    ['18']
    dict_keys([('name',), 'age', 'sex'])
    dict_values(['jack', ['18'], 'male'])
    <class 'dict_values'>
    dict_items([(('name',), 'jack'), ('age', ['18']), ('sex', 'male')])
    male
    None
    ('sex', 'male')
    {('name',): 'jack', 'age': ['18']}
    ['18']
    {('name',): 'jack'}


# 第五课 集合
1. 集合元数不可重复,类似数学中的集合
2. 元数类型不可变类型
3. 集合元数没有顺序,不能比较和排序,没有索引和位置的概念
4. 用花括号{}表示
5. 可用set()创建



```python

集合

s = {101, "python", 23.3}

print(type(s))

s = set((1, 2, 3, 4))

s.add(5)

s.add(5)#重复元数不再添加

print(s)

s.add(6)

print(s)

s.remove(1)#移除集合中的1,如若不存在就会报错 keyError

print(s.pop()) #随机删除一个

print(s)

s.update({"hh"})

print(s)

print("hh" in s)

s.discard("hh")

print(s)

print("hh" not in s)

代码语言:txt
复制
    <class 'set'>
    {1, 2, 3, 4, 5}
    {1, 2, 3, 4, 5, 6}
    2
    {3, 4, 5, 6}
    {3, 4, 5, 6, 'hh'}
    True
    {3, 4, 5, 6}
    True



```python

集合运算符

s = {1, 2, 3, 4, 6}

t = {1, 2, 6}

print(s-t) #差集 {3, 4}

print(t-s) #差集 set()

print(s&t) #交集

print(s^t) #对称差集,s、t的非共同元数

print(s|t) #并集,s、t的所有元数

代码语言:txt
复制
    {3, 4}
    set()
    {1, 2, 6}
    {3, 4}
    {1, 2, 3, 4, 6}


# 第六课 文件中的数据处理

![](https://ai-studio-static-online.cdn.bcebos.com/0396afc2f2734a5e946d0b75efbc0453854ae28fc017405db2556e19c3723975)
![](https://ai-studio-static-online.cdn.bcebos.com/7ba82ba82513437498b66f8cd62b8b5e9bfe6a5be7fa422bb1162ff91f92a4ca)
![](https://ai-studio-static-online.cdn.bcebos.com/6c16e7e6f2fc437e82ebcc404df90d67adfe4824deef4d79a4c133f3656fd49c)



```python

文件数据操作

f = open("work/shell.txt", "w+")

print(f.writelines("hello \n shell!"))

f.close();

f = open("work/shell.txt", "ab+")

f.readline()

f.tell() #查询光标位置

f.seek(1) #移动光标位置

f.close();

代码语言:txt
复制
    None





    12




```python

一维数据

ls = "天安门", "故宫", "天坛", "长城"

fo = open("/Users/easy/Desktop/data.csv", "w+")

fo.write(",".join(ls))

fo.close()

fo = open("/Users/easy/Desktop/data.csv", "r")

list = fo.read().strip("\n").split(",") #strip 去掉行两边的换行符,用逗号分割

fo.close()

print(list)

代码语言:txt
复制
```python

二维数组

ls = ["景区", "票价", "天安门", "15", "故宫", "20", "天坛", "100", "长城", "60"]

fo = open("/Users/easy/Desktop/data.csv", "w")

for row in ls:

代码语言:txt
复制
# 以逗号分割作为行写入,末尾添加换行
代码语言:txt
复制
fo.write(",".join(row)+"\n") #写只能是字符串 str,否则报错

fo.close()

读取数据

list = []

fi = open("/Users/easy/Desktop/data.csv", "r")

for line in fi:

代码语言:txt
复制
list.append(line.strip("\n").split(","))

print(list)

fi.close()

代码语言:txt
复制
# 第七课 NumPy
#### ndarray 为了优化批量运算而生,与list不同,ndarray的元数类型一致,数据地址连续,批量操作会更快。而list的元数类型可能不一致,需通过寻址方式找到下一个元数。ndarray 还支持广播机制,矩阵运算时不需写for循环


```python

a1 = 1, 2, 3, 4, 6

a2 = 1, 2, 6, 2, 1

合并添加元数

print(a1 + a2)

for i in range(0, len(a1)):

代码语言:txt
复制
a1[i] = a1[i] + a2[i]

print(a1)

元数加1

for num in a1:

代码语言:txt
复制
num =+ 1

print(a1)

import numpy as np

s = np.array(1, 2, 3, 4, 6)

t = np.array(1, 2, 6, 2, 1)

两数组相加,批量处理

c = s + t

print(c)

元数加1, 批量处理

print(s+1)

代码语言:txt
复制
    [1, 2, 3, 4, 6, 1, 2, 6, 2, 1]
    [2, 4, 9, 6, 7]
    [2, 4, 9, 6, 7]
    [2 4 9 6 7]
    [2 3 4 5 7]



```python

ndarray 广播机制

import numpy as np

s = np.array([1, 2, 3, 4, 6, 2, 2, 6, 2, 1])

t = np.array(3, 2, 6, 2, 5) # 相加时,自动广播扩展为二维进行运算 [3, 2, 6, 2, 5, 3, 2, 6, 2, 5]

c = s + t

print(c)

代码语言:txt
复制
    [[ 4  4  9  6 11]
     [ 5  4 12  4  6]]



```python

ndarray 的创建

import numpy as np

a = 1, 2, 6, 2, 1

print(id(a))

b = np.ndarray(a) #将a转化为nd

print(id(b))

c = np.ndarray(1, 2, 6, 2, 1) #直接创建nd

print(id(c))

d = np.arange(10, 20, 2) #通过指定起始start、终止stop、间隔(步长)interval, 来生成数组

print(d)

e = np.zeros(5) #5列数组

print(e)

#2行4列二维数组

print(np.zeros(2,4))

f = np.ones(2,4)

print(a, "数据类型dtype:{}, 形状shape:{}, 元素个数size:{}, 数组维度ndim:{}".format(f.dtype, f.shape, f.size, f.ndim))

代码语言:txt
复制
    140284688014224
    140284692440288
    140284687888432
    [10 12 14 16 18]
    [0. 0. 0. 0. 0.]
    [[0. 0. 0. 0.]
     [0. 0. 0. 0.]]
    [1, 2, 6, 2, 1] 数据类型dtype:float64, 形状shape:(2, 4), 元素个数size:8, 数组维度ndim:2



```python

import numpy as np

随机产生数组,random.rand产生的值范围[0, 1)

b = np.random.rand(2)

print(b)

c = np.random.rand(2, 3) #2行3列二维数组

print(c)

转换数据类型

e = c.astype(np.int64)

print(e)

print(e.dtype)

改变形状,f和e的元数个数要一致

f = c.reshape(1, 6)

print(f)

代码语言:txt
复制
    [0.51336787 0.64459987]
    [[0.39897641 0.0609749  0.20308816]
     [0.87602365 0.63098506 0.73744827]]
    [[0 0 0]
     [0 0 0]]
    int64
    [[0.39897641 0.0609749  0.20308816 0.87602365 0.63098506 0.73744827]]



```python

a = np.array([4, 4, 9, 6, 11, 5, 4, 12, 4, 6])

print(a + 1)

print(a * 2)

print(a / 2)

print(a ** 0.5) #开根号

代码语言:txt
复制
    [[ 5  5 10  7 12]
     [ 6  5 13  5  7]]
    [[ 8  8 18 12 22]
     [10  8 24  8 12]]
    [[2.  2.  4.5 3.  5.5]
     [2.5 2.  6.  2.  3. ]]
    [[2.         2.         3.         2.44948974 3.31662479]
     [2.23606798 2.         3.46410162 2.         2.44948974]]



**ndarray切片数组上的任何修改,都会直接反映到元数组上。ndarray的切片出新数组和原数组的内存都是同一块**


```python

ndarray 索引和切片

arange随机生成(0, 30],间隔步长为2的数组

a = np.arange(0, 30, 2)

print("a=",a)

print("a10=",a10)

b = np.arange(30)

print("b=",b)

切片出新数组, 还是指向原来的内存区域,数据不会被赋值

c = b4:7

print("c=",c)

切片数组上的任何修改,都会直接反映到元数组上。ndarray的切片出新数组和原数组的内存都是同一块

c0 = 100

print("b=",b)

整段切片赋值

b4:7 = 10

print("b=",b)

代码语言:txt
复制
    a= [ 0  2  4  6  8 10 12 14 16 18 20 22 24 26 28]
    a[10]= 20
    b= [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
     24 25 26 27 28 29]
    c= [4 5 6]
    b= [  0   1   2   3 100   5   6   7   8   9  10  11  12  13  14  15  16  17
      18  19  20  21  22  23  24  25  26  27  28  29]
    b= [ 0  1  2  3 10 10 10  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
     24 25 26 27 28 29]



```python

通过copy给切片新数组创建不同的内存空间

a = np.arange(30)

a_slice = a4:7

a_slice = np.copy(a_slice) #创建不同的内存空间

a_slice0 = 1000

print("a=",a)

print("a_slice=",a_slice)

代码语言:txt
复制
    a= [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
     24 25 26 27 28 29]
    a_slice= [1000    5    6]



```python

创建多维数组

a = np.arange(30)

print(a)

arr3d = a.reshape(5, 3, 2)#5个3行2列

print(arr3d)

第0维上索引, 后面维度不变

print("第0维上索引:", arr3d0)

两个索引指标 arr3d0 等同于 arr3d0, 0

print("索引:", arr3d0)

print("索引:", arr3d0, 0, 1)

代码语言:txt
复制
    [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
     24 25 26 27 28 29]
    [[[ 0  1]
      [ 2  3]
      [ 4  5]]
    
     [[ 6  7]
      [ 8  9]
      [10 11]]
    
     [[12 13]
      [14 15]
      [16 17]]
    
     [[18 19]
      [20 21]
      [22 23]]
    
     [[24 25]
      [26 27]
      [28 29]]]
    第0维上索引: [[0 1]
     [2 3]
     [4 5]]
    索引: [0 1]
    索引: 1



```python

多维数组的切片, 利用for 遍历切片

a = np.arange(24)

b = a.reshape(6, 4)

print(b)

s = []

for i in range(0, 6, 2): #0 2 4

代码语言:txt
复制
s.append(b[i:i+2])

print(s)

代码语言:txt
复制
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]
     [12 13 14 15]
     [16 17 18 19]
     [20 21 22 23]]
    [array([[0, 1, 2, 3],
           [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
           [12, 13, 14, 15]]), array([[16, 17, 18, 19],
           [20, 21, 22, 23]])]


# 函数


```python

def data(name, age=18):

代码语言:txt
复制
print(name+str(age)+"岁")

data("浩辰",20)

关键字传参

data(age=18, name="唐三")

代码语言:txt
复制
    浩辰20岁
    唐三18岁
    (1, 2, 3)
    [30, 40]
    [56, 89]
    {'a': 1, 'b': 2, 'c': 3}



```python

可变长度参数

*param 接收任意多个参数放入一个元组中

**param 接收任意多个关键字参数放入字典中

def demo(*param):

代码语言:txt
复制
print(param)

demo(1, 2, 3)

*mean 接收任意多个参数放入一个元组中

first, *mean, last = 20, 30, 40, 50

print(mean)

一个变量多个可变参数

*mean, = 56, 89

print(mean)

高级用法

l = ("第一", 100, "很好"), ("第二", 90, "好"), ("第三", 80, "一般"), ("第四", 60, "合格")

for d, f, p in l:

代码语言:txt
复制
print(d, f, p)

for d, *p in l:

代码语言:txt
复制
print(d, p)

def demo1(**p):

代码语言:txt
复制
print(p)

demo1(a=1, b=2, c=3)

代码语言:txt
复制
    (1, 2, 3)
    [30, 40]
    [56, 89]
    第一 100 很好
    第二 90 好
    第三 80 一般
    第四 60 合格
    第一 [100, '很好']
    第二 [90, '好']
    第三 [80, '一般']
    第四 [60, '合格']
    {'a': 1, 'b': 2, 'c': 3}


### 传递参数时的序列解包


```python

对列表、元组解包

*p解包

def demo(a, b, c):

代码语言:txt
复制
print(a+b+c)

list = 2, 3, 4

demo(*list)

tup = (3, 5, 7)

demo(*tup)

#集合

s = {7, 8, 9}

demo(*s)

对字典解包

*p解包解包的是键key

**p解包的是值value

def demo2(a, b, c):

代码语言:txt
复制
print(a+b+c)

dic = {"a":1, "b":2, "c":3}

demo2(*dic)

demo2(**dic)

dic 键与Demo2的形参要对应,否则报错

dic = {"a":1, "b":2, "d":3}

dic(**dic) # 报错

代码语言:txt
复制
    9
    15
    24
    abc
    6



    ---------------------------------------------------------------------------

    TypeError                                 Traceback (most recent call last)

    /tmp/ipykernel_93/2067124093.py in <module>
         28 # dic 键与Demo2的形参要对应,否则报错
         29 dic = {"a":1, "b":2, "d":3}
    ---> 30 dic(**dic)
    

    TypeError: 'dict' object is not callable



```python

函数返回值,返回0个或者多个,多个以元组形式返回

def cal(x,y):

代码语言:txt
复制
return x+y, x-y

a, b = cal(5,2)

print(a)

print(a,b)

代码语言:txt
复制
    7
    7 3



```python

变量、全局变量global

def cal():

代码语言:txt
复制
global a 
代码语言:txt
复制
a = 10
代码语言:txt
复制
print(id(a))
代码语言:txt
复制
print(a)

cal()

a = 99

print(id(a))

print(a)

代码语言:txt
复制
    94798584353856
    10
    94798584356704
    99



```python

lambda 函数(匿名函数)

def func(x, y):

代码语言:txt
复制
return x*y

等同于

func1 = lambda x,y:x*y

print(func(1,2))

print(func1(1,2))

fun = lambda x,y:x if x>y else y

fun(2,3)

代码语言:txt
复制

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 字典,元组是可以作为建,列表只能作为值
  • isinstance(d.values(), list)
  • 集合
  • 集合运算符
  • 文件数据操作
  • 一维数据
  • 二维数组
  • 读取数据
  • 合并添加元数
  • 元数加1
  • 两数组相加,批量处理
  • 元数加1, 批量处理
  • ndarray 广播机制
  • ndarray 的创建
  • 随机产生数组,random.rand产生的值范围[0, 1)
  • 转换数据类型
  • 改变形状,f和e的元数个数要一致
  • ndarray 索引和切片
  • arange随机生成(0, 30],间隔步长为2的数组
  • 切片出新数组, 还是指向原来的内存区域,数据不会被赋值
  • 切片数组上的任何修改,都会直接反映到元数组上。ndarray的切片出新数组和原数组的内存都是同一块
  • 整段切片赋值
  • 通过copy给切片新数组创建不同的内存空间
  • 创建多维数组
  • 第0维上索引, 后面维度不变
  • 两个索引指标 arr3d0 等同于 arr3d0, 0
  • 多维数组的切片, 利用for 遍历切片
  • 关键字传参
  • 可变长度参数
  • *param 接收任意多个参数放入一个元组中
  • **param 接收任意多个关键字参数放入字典中
  • *mean 接收任意多个参数放入一个元组中
  • 一个变量多个可变参数
  • 高级用法
  • 对列表、元组解包
  • *p解包
  • 对字典解包
  • *p解包解包的是键key
  • **p解包的是值value
  • dic 键与Demo2的形参要对应,否则报错
  • 函数返回值,返回0个或者多个,多个以元组形式返回
  • 变量、全局变量global
  • lambda 函数(匿名函数)
  • 等同于
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档