深度学习-推荐系统-CV-NLP人工智能/模式识别/机器学习精华专题大数据,机器学习,人工智能

《利用Python进行数据分析》-3-数据结构、函数和文件

2019-07-14  本文已影响1人  皮皮大

一、 数据结构和序列

元组tuple

创建

tuple2 = ((1,2,3),4, [1,3,9])
tuple2
((1, 2, 3), 4, [1, 3, 9])

tuple3 = (2,)   # 单个元素带上英文逗号
tuple3
(2,)
image.png

迭代器转成元组

tuples()是一个函数,可以将任意的序列(比如字符串、列表等)转成元组形式

tuple([1,3,4])  # 将列表转成元组
(1, 3, 4)

tuple("python")  # 将字符串转成元组
('p', 'y', 't', 'h', 'o', 'n')
image.png

元组操作

tuple2[2]  # 访问元组中的元素
[1, 3, 9]

tuple2[2].append(8)  # 元组中的列表进行增添元素操作
tuple2
((1, 2, 3), 4, [1, 3, 9, 8])

("python", "java") + (0, 9) + ([1,2,3], "php")   # 多个元组相加
('python', 'java', 0, 9, [1, 2, 3], 'php')

("python", 2) * 4   # 复制串联功能
('python', 2, 'python', 2, 'python', 2, 'python', 2)

拆分元组

如果想将元组赋值给类似元组的变量,Python会拆分等号两边的值

>>tuple5 = (1, "python", [2,1,4])
>>a, b, c = tuple5
>>c
[2, 1, 4]
image.png
>>tuple6 = (6, "python", (9, 3))
>>a, b, (c, d) = tuple6    # 左边变量的个数要和元组的len相同
>>c
9

Python中的变量互换

image.png

变量拆分用来迭代元组或者列表序

seq = [(1,2,3), (4,5,6), (7,8,9)]
for a,b,c in seq:
    print("a={0} b={1} c={2}".format(a,b,c))
image.png

高级拆分功能

Python3中新增了高级的拆分功能,通过特殊语法*rest来表示,多用于抓取任意长度列表的位置参数:

values = 1, 3, 9, 8, 4
a, b, *rest = values   # 利用三个参数分配所有的元组对象
a, b  # 每个变量一个元组对象
(1, 3)

rest  # 剩下的全部是rest的,是列表形式
[9, 8, 4]
image.png
tuple7 = (1,2,3,5,1,3,8,3)
tuple7.count(3)     # 统计某个对象出现的次数

3

列表list

特点

list1 = [1,3,[1,0,4], "python"]   # 列表里面的对象是任意的数据类型

list2 = list((1,2,3,4))   # 将元组转成列表通过list()函数

list3 = list(range(5))  # 将range函数生成的对象通过list()函数转成列表
image.png

list操作

在笔者第一篇札记中有详细的list知识,请参考Python札记1_list列表

image.png

attention注意:在列表中查找比字典和集合中要慢


extend的方法比串联(使用+)的方法要快:将所有的元素追加到一个大的列表中

list1 = []
list2 = [[4,8,9],["shenzhen","suzhou"],["python","java"]]
for i in list2:
    list1.extend(i)    #extend方法,快
print(list1)
list1 = []
list2 = [[4,8,9],["shenzhen","suzhou"],["python","java"]]
for i in list2:
    list1 = list1 + i   # +串联方法,慢
print(list1)

结果:

[4, 8, 9, 'shenzhen', 'suzhou', 'python', 'java']
list3 = [1,9,3,2,5]
list3.sort()
list3

list4 = sorted(list3)  # 默认从小到大,reverse=True:改成从大到小
list4

结果
[1, 2, 3, 5, 9]

根据长度key进行排序

list5 = ["python", "java", "c", "javascript", "html", "c++"]
list5.sort(key=len)  # 根据长度排序
list5

结果:

['c', 'c++', 'java', 'html', 'python', 'javascript']

二分搜索bisect

bisect模块支持二分查找,和向已知排序的列表插入值。

import bisect
list6 = [1,2,2,2,3,6,7,9]
bisect.bisect(list6,2)   # 插入元素2,按照顺序排列。如果有2,排序最后,返回的是索引值   # 结果4

bisect.bisect(list6,8)  # 插入8,返回的是索引值  #结果7

bisect.insort(list6,5)   # 索引值为5的位置插入5
list6

[1, 2, 2, 2, 3, 5, 6, 7, 9]  

列表切片

切片的基本形式为[start:stop:step]

image.png

序列函数

https://www.cnblogs.com/sesshoumaru/p/6140987.html,这位博主对于内置函数的总结非常棒!感兴趣的去学习下。在Python有常见的序列函数:


sorted([1,4,2,9,5,8])
[1, 2, 4, 5, 8, 9]
image.png image.png
list7 = ["python", "java", "html", "Ruby"]
dict1 = { }
for k, v in enumerate(list7):
    dict1[v] = k
print(dict1)

{'python': 0, 'java': 1, 'html': 2, 'Ruby': 3}
image.png
list9 = ["python", "java", "html"]
list10 = ["shenzhen", "suzhou","zhuhai"]
zipped = zip(list9, list10)   # 得到zip对象
list(zipped)   # 通过列表进行展示

[('python', 'shenzhen'), ('java', 'suzhou'), ('html', 'zhuhai')]
image.png
zipped2 = zip(list1,tuple2,seq)   # 生成新序列的长度取决于最短的序列。seq长度为2
list(zipped2)

[(1, 9, False), (9, 8, True)]
image.png

zip和enumerate联用

list1 = ["python","java","html"]
list2 = [9,6,2]
for a, (b,c) in enumerate(zip(list1, list2)):  # 先zip合并,再enumerate同时取索引和元素
    print("{0}:{1} {2}".format(a, b, c))

结果:
0:python 9
1:java 6
2:html 2
image.png

zip进行解压
zip函数有一种类似于zip的功能,用来解压序列。

list3 = [("python", 0), ("html", 1), ("java", 2), ("javascript", 3)]
vlaues, numbers = zip(*list3)
values

结果
('python', 'html', 'java', 'javascript')
image.png
list(reversed(range(10)))   # 进行翻转

[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

字典dictionary

特点

操作方法

image.png image.png

多种创建方法

字典的创建是非常灵活的,方式多种多样:

dict1 = {"python": "shenzhen", "html":"shanghai", "java":"beijing","zhuhai":[1,2,6]}
dict1  # 创建字典
keys = ["python", "java", "html"]
values = (1,4,6)
dict3 = {}
for key, value in zip(keys, values):
    dict3[key] = value
print(dict3)
dict4 = dict(zip(list(range(5)),reversed(range(5))))
dict4

{0: 4, 1: 3, 2: 2, 3: 1, 4: 0}
上一篇 下一篇

猜你喜欢

热点阅读