python学习之数据结构

列表

list=[val1,val2,val3,val4]
  • 列表中每一个元素是可变的;
  1. 列表中每个元素是有序的,每个元素都有相应的位置;
  2. 列表可以容纳python中任何对象

查询(只接受位置索引[0])

Weekday = ['Monday','Tuesday','Wednesday','Thursday','Friday']#创建一个列表
print(Weekday[0])#索引0位置的元素

添加insert(插入一个元素)extend(添加多个元素)

fruit = ['pineapple','pear']
fruit.insert(1,'grape')#列表中插入一个元素用.insert()方法
print(fruit)
fruit[0:0] = ['Orange']#也可以用这种方式插入
print(fruit)

删除remove()或者del关键字实现

fruit = ['pinapple','pear','grape']
fruit.remove('grape')#用.remove()方法实现删除
print(fruit)
del fruit[0:2]#还可以用del关键字来删除
print(fruit)

替换

fruit[0] = 'Grapefruit'#索引变量被后面赋值
print(fruit)

检索

periodic_table = ['H','He','Li','Be','B','C','N','O','F','Ne']
print(periodic_table[0])#索引出0位置
print(periodic_table[-2])#索引出-2位置元素
print(periodic_table[0:3])#索引出0、1、2位置的元素
print(periodic_table[-10:-7])#索引出-10、-9、-8位置的元素
print(periodic_table[-10:])#索引出-10到最后的元素
print(periodic_table[:9])#索引出0到8位置上的元素
print(periodic_table['H'])#报错可得知列表索引必须是整数或者是片,而不是字符串即用元素索引出对应的位置

字典(键值对)

dict={key:val1,key2:val2}
  1. 字典中的数据必须以键值对的形式出现;
  2. 逻辑上,键不能重复,但值可以;
  • 字典中的键是不可变的,不可修改;值是可以变,修改的,可以是任何对象;

字典可以添加NASDAQ_code[‘YOU’]=’Youku’或者.update()

NASDAQ_code = {'BIDU':'Baidu','SINA':'Sina'}
NASDAQ_code['YOKU'] = 'Youku'#字典添加一个用法
print(NASDAQ_code)
NASDAQ_code.update({'FB':'Facebook','TSLA':'Tesla'})#字典添加多个用.update()方法
print(NASDAQ_code)

删除del()

del NASDAQ_code['FB']#字典删除del关键字
print(NASDAQ_code)

索引(只能索引关键词NASDAO_code[‘YOU’])

NASDAQ_code['TSLA']#字典的索引,是用列表的方法索引关键字

但字典不能切片

NASDAQ_code[1:4] # WRONG!字典不能进行切片

元组(固定的列表)

tuple=(val1,val2,val3,val4)
不可以添加、删除。可以索引

letters = ('a','b','c','d','e','f','g')#元组的形式(X,Y)
letters[0]#元组的索引和列表类似

集合

set={val1,val2,val3,val4}
集合元素无序,不重复,用来判断从属关系
集合可添加、删除,集合运算,但不可以索引

a_set = {1,2,3,4}#创建集合
a_set.add(5)#添加集合元素.add()
print(a_set)
a_set.discard(5)#删除集合元素.discard()
print(a_set)

数据结构的一些技巧

多重循环

sorted(list)方法实现列表元素排序

num_list = [6,2,7,4,1,3,5]
print(sorted(num_list))#sorted()分类整理函数
sorted(num_list,reverse=True)#默认参数reverse为false,现在实现的倒序

for a,b in zip(num,str)俩个列表

num = [6,2,7,4]
str = ['a','b','c','d']
for a,b in zip(num,str):
    print(b,'is',a)#很容易格式错误expected an indented block期待在约束块中

推导式

10个元素装入列表
普通写法

a = []
for i in range(1,11):
    a.append(i)#用.append()方法+for循环实现1到10的加入列表
print(a)

列表递推式

b = [i for i in range(1,11)]#用列表解析式实现1到10的加入列表
print(b)

为了深刻立即list = [item for item in iterable]举几个栗子吃吃就知道了

a = [i**2 for i in range(1,10)]#i**2为我们要放在列表中的元素,i的取值范围为1到9,既可以预见结果为1,4,9...81 
c = [j+1 for j in range(1,10)]#2,3,4....10
k = [n for n in range(1,10) if n % 2 ==0]#n为1到9范围内的偶数
z = [letter.lower() for letter in 'ABCDEFGHIGKLMN']#字符串按小到大排列

字典的递推式实现

d = {i:i+1 for i in range(4)}#字典中键从0到3的一个添加
g = {i:j for i,j in zip(range(1,6),'abcde')}#字典中键i从1到5,值j从a到e的组合添加
g = {i:j.upper() for i,j in zip(range(1,6),'abcde')}#.upper()方法实现字母小写变大写的功能

循环列表时获取元素索引

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
for num,letter in enumerate(letters):#用enumerate()枚举函数,将列表的元素位置枚举出来
    print(letter,'is',num + 1)

综合项目:词频率统计

import string#引入字符串模块
path = '/Users/sharymo/Desktop/Walden.txt'
with open(path,'r') as text:
    words = [raw_word.strip(string.punctuation).lower() for raw_word in text.read().split()]#去掉前面的标点符号,并把首字母改写成小写
    words_index = set(words)#将列表转换成集合,并把其中的重复去掉
    counts_dict = {index:words.count(index) for index in words_index}#创建一个以单词为key,以频数为值的字典
for word in sorted(counts_dict,key=lambda x: counts_dict[x],reverse=True):
    print('{} -- {} times'.format(word,counts_dict[word]))#打印整理好的函数

这次学的都蛮实用的
萌新求多多支持_

你可能感兴趣的:(python学习之数据结构)