渗透利器-kali工具 (第四章-3) Python数据结构学习
本文内容:
- 列表、元组、字典、集合
- 数据结构的技巧
- 综合项目提升
数据结构:拥有足够多的东西,需要一个存储东西的容器,数据越多,就会越重视数据结构的作用。
1.列表、元素、字典、集合:
1.列表:[]
1.列表最显著的特征是:
1.列表中的每一个元素都是可变的;
2.列表中的元素是有序的,也就是每一个元素都一个位置;
3.列表可以容纳Python中的任何对象。
2.列表的操作:
1.insert() 插入,需要指定插入位置:
在使用insert方法的时候,必须指定在列表中需要插入新的元素位置,插入元素的实际位置是在指定位置元素之前的位置。
如果指定插入的位置在列表中不存在,实际上也就超出指定列表长度,那么这个元素一定会被放在列表的最后位置。
举例:
a = ['a','b','c']
a.insert(1,'d')
补充:
a[0:0]=['e']
也可以起到插入的效果。
2.remove() 删除
举例:
a = ['a','b','c']
a.remove('e')
补充:[其余删除方式]
del a[0:1]
a[1]=e 也是可以说是修改
2.字典:{}
1.字典特征:
1.字典中的数据必须是键值对的形式出现。
2.逻辑上,键是不能重复的,而值可以重复。
3.字典中的键[key]是不可变的,也就是无法修改的。
4.字典中的值[auo]是可变的,可修改,可以是任何对象。
举例:
dict{'a':'bai','c':'hei','d':'red'}
书写:字典的书写方式,键与值并不能脱离对方而存在。
2.字典的操作:
列表中有用来添加多个元素的方法extend(),在字典中也有对应的添加多个元素的方法:date();
删除字典中的元素则使用del方法。
注意:
字典是不能够切片的。
通过键对值进行操作:比如删除,输出等操作。
1.添加字典:
a = {'k1':1,'k2':2,'k3':3}
a['k4'] = 4 添加单个键值对
a.update({'k5':5,'k6':6}) 添加多个键值对
2.删除字典:
del a['key6'] 删除键值对,通过指定键删除
3.元组:()
1.元组的特征:
1.元素其实可以理解成一个稳固版的列表,但是元组是不可修改的。
2.因此在列表中存在的方法均不可以使用在元组上。
3.但是元组是可以被查看索引的,方式和列表一样。
2.元组的操作:
举例:
a = ('a','b','c')
a[0]
4.集合:()
1.集合特征:
1.集合则更接近数学集合的概念;
2.每一个集合中的元素是无序的、不重复的任意对象。
3.可以通过集合去判断数据的从属关系。
4.可以通过稽核吧数据结构中重复的元素减掉。
注意:集合不能被切片也不能被索引,除了做集合运算之外,集合元素就可以添加还有删除。
2.集合的操作:
举例:
a = {1,2,3,4}
1.添加:[add]
a.add(5)
2.删除:[discard]
a.discard(4)
2,数据结构的技巧:
1.多种循环:
1.多种循环:
sorted函数按照长短、大小、英文字符的顺序给每个列表中的元素进行排序。
这个函数会常在数据展示中使用,其中一个非常重要的地方,sorted函数不会改变列表本身,可以理解成是先将列表复制,然后在进行顺序整理。
在列表过程中,如果同时需要两个列表应该怎么办?
可以使用zip函数:
格式:for a,b in zip (L1,L2):
举例:
a = [1,2,3,4]
b = [1,4,5,6]
for a,b in zip(a,b):
print(b,'is',a)
2.推导式:
1.列表推导式:
list = [i | for i in a]
列表推导式的用法很好理解,可以简单的看成两部分:
从 | 后面是for循环表达式,| 前面可以让认为是我们想要放在列表中的元素。
enumerate:循环列表时获取元素的索引。
普通写法:
a = []
for i in range(1,5): 1-4
a.append(i)
print(a)
推导式:
a = {i:j for i,j in zip(range(1,5),'abcd,')}
print(a)
运行结果:{1:'a',2:'b',……4,'d'}
3,综合项目提升:
1.将一句话,每个单词分开来:
a = 'my name dddd'
b = a.split()
print(b)
运行结果:['my','name','dddd']
2.统计文章中单词出现的次数:
代码:
1 import string 2 path = 'c/User/python/ww.txt' 3 with open(path ,'r') as text: 4 words = [raw_word.string(string.puncuation).lower() for raw_word in text.read().split()] 5 words_index = set(words) 6 counts_dict = {index:words.counts(index) for index in words_index} 7 for word in sorted(counts,key=lambda x:counts_dict[x],reverse=True): 8 print('{}--{} times'.format(word,counts_dict[word]))