Python基础课程-常见的数据结构
字典
字典是将键(key)映射到值(value)的无序数据结构。值可以是任何值(列表,函数,字符串,任何东西)。键(key)必须是不可变的,例如,数字,字符串或元组。
示例
字典:我们查找的单词是key,查找的定义是值
In [111]
# Defining a dictionary
webstersDict = {'person': 'a human being, whether an adult or child', 'marathon': 'a running race that is about 26 miles', 'resist': ' to remain strong against the force or effect of (something)', 'run': 'to move with haste; act quickly'}
In [112]
webstersDict
{'marathon': 'a running race that is about 26 miles','person': 'a human being, whether an adult or child','resist': ' to remain strong against the force or effect of (something)','run': 'to move with haste; act quickly'}
访问字典中的值
In [113]
# Finding out the meaning of the word marathon
# dictionary[key]
webstersDict['marathon']
'a running race that is about 26 miles'
更新字典
In [114]
# add one new key value pair to dictionary
webstersDict['shoe'] = 'an external covering for the human foot'# return the value for the 'shoe' key
webstersDict['shoe']
'an external covering for the human foot'
In [115]
# update method, update or add more than key value pair at a time
webstersDict.update({'shirt': 'a long- or short-sleeved garment for the upper part of the body', 'shoe': 'an external covering for the human foot, usually of leather and consisting of a more or less stiff or heavy sole and a lighter upper part ending a short distance above, at, or below the ankle.'})
webstersDict
{'marathon': 'a running race that is about 26 miles','person': 'a human being, whether an adult or child','resist': ' to remain strong against the force or effect of (something)','run': 'to move with haste; act quickly','shirt': 'a long- or short-sleeved garment for the upper part of the body','shoe': 'an external covering for the human foot, usually of leather and consisting of a more or less stiff or heavy sole and a lighter upper part ending a short distance above, at, or below the ankle.'}
In [116]
# Removing key from dictionary
del webstersDict['resist']
webstersDict
{'marathon': 'a running race that is about 26 miles','person': 'a human being, whether an adult or child','run': 'to move with haste; act quickly','shirt': 'a long- or short-sleeved garment for the upper part of the body','shoe': 'an external covering for the human foot, usually of leather and consisting of a more or less stiff or heavy sole and a lighter upper part ending a short distance above, at, or below the ankle.'}
不是所有东西都可以当作Key
下方是错误用法示例
In [117]
webstersDict[['sock']] = 'a short stocking usually reaching to the calf or just above the ankle.'
---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-117-95ef7f324c79> in <module>() ----> 1 webstersDict[['sock']] = 'a short stocking usually reaching to the calf or just above the ankle.' TypeError: unhashable type: 'list'
使用get()方法返回给定键的值
你会明白为什么这在字数统计任务中如此有价值
In [118]
# incorporate into get example and such below.
storyCount = {'is': 100, 'the': 90, 'Michael': 12, 'runs': 5}
In [119]
storyCount
{'Michael': 12, 'is': 100, 'runs': 5, 'the': 90}
In [120]
# key error for keys that do not exist
storyCount['run']
---------------------------------------------------------------------------KeyError Traceback (most recent call last)<ipython-input-120-7457d9dbff5f> in <module>() 1 # key error for keys that do not exist ----> 2 storyCount['run'] KeyError: 'run'
In [121]
# if key doesnt exist,
# specify default value for keys that dont exist.
# returns value for key you enter if it is in dictionary
# else it returns the value you have for default
storyCount.get('Michael', 0)
12
In [122]
# When you dont set default value for key that doesnt exist,
# it defaults to none
print(storyCount.get('run'))
None
In [123]
# Making default value for key that doesn't exist 0.
print(storyCount.get('run', 0))
0
删除键,但同时可以返回值
In [124]
count = storyCount.pop('the')
print(count)
90
遍历字典
In [125]
# return keys in dictionary
print(storyCount.keys())# return values in dictionary
print(storyCount.values())
['is', 'runs', 'Michael'] [100, 5, 12]
In [126]
# iterate through keys
for key in storyCount: print(key)
is runs Michael
In [127]
# iterate through keys and values
for key, value in webstersDict.items():print(key, value)
('person', 'a human being, whether an adult or child') ('run', 'to move with haste; act quickly') ('shoe', 'an external covering for the human foot, usually of leather and consisting of a more or less stiff or heavy sole and a lighter upper part ending a short distance above, at, or below the ankle.') ('marathon', 'a running race that is about 26 miles') ('shirt', 'a long- or short-sleeved garment for the upper part of the body')
元组
元组是一种序列,就像列表一样。元组和列表之间的区别在于,与列表(可变)不同,元组不能更改(不可变)。 元组使用括号,而列表使用方括号。
初始化一个元组
有两种方法可以初始化空元组。您可以通过让()没有值来初始化空元组
In [69]
# Way 1
emptyTuple = ()
您还可以使用元组函数初始化空元组。
In [70]
# Way 2
emptyTuple = tuple()
可以通过用逗号分隔值的序列来初始化具有值的元组。
In [72]
# way 1
z = (3, 7, 4, 2)# way 2 (tuples can also can be created without parenthesis)
z = 3, 7, 4, 2
重要的是要记住,如果要创建仅包含一个值的元组,则需要在项目后面添加一个逗号。
In [73]
# tuple with one value
tup1 = ('Michael',)# tuple with one value
tup2 = 'Michael', # This is a string, NOT a tuple.
notTuple = ('Michael')
访问元组内的值
元组中的每个值都有一个指定的索引值。值得注意的是,python是一种基于零索引的语言。所有这些意味着元组中的第一个值是索引0。
In [75]
# Initialize a tuple
z = (3, 7, 4, 2)# Access the first item of a tuple at index 0
print(z[0])
3
Python还支持负索引。负索引从元组结束开始。使用负索引来获取元组中的最后一项有时会更方便,因为您不必知道元组的长度来访问最后一项。
In [76]
# print last item in the tuple
print(z[-1])
2
提醒一下,您也可以使用正索引访问相同的项目(如下所示)。
In [77]
print(z[3])
2
切分元组
切分操作返回包含所请求项的新元组。切分很适合在元组中获取值的子集。对于下面的示例代码,它将返回一个元组,其中包含索引0的对象,而不包括索引2的对象。
In [78]
# Initialize a tuple
z = (3, 7, 4, 2)# first index is inclusive (before the :) and last (after the :) is not.
print(z[0:2])
(3, 7)
In [80]
# everything up to but not including index 3
print(z[:3])
(3, 7, 4)
负索引也OK
In [81]
print(z[-4:-1])
(3, 7, 4)
元组是不可改变的
元组是不可变的,这意味着在初始化元组之后,不可能更新元组中的单个项。正如您在下面的代码中所看到的,您无法更新或更改元组项的值(这与可变的Python列表不同)。
下方有错误示例
In [83]
z = (3, 7, 4, 2)z[1] = "fish"
---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-83-1ba53bfc5f04> in <module>() 1 z = (3, 7, 4, 2) 2 ----> 3 z[1] = "fish" TypeError: 'tuple' object does not support item assignment
即使元组是不可变的,也可以采用现有元组的一部分来创建新的元组,如下例所示。
In [85]
# Initialize tuple
tup1 = ('Python', 'SQL')# Initialize another Tuple
tup2 = ('R',)# Create new tuple based on existing tuples
new_tuple = tup1 + tup2;
print(new_tuple)
('Python', 'SQL', 'R')
Tuple方法
在开始本节之前,让我们首先初始化一个元组
In [86]
# Initialize a tuple
animals = ('lama', 'sheep', 'lama', 48)
index 方法(索引)
index方法返回对应值的第一个索引
In [87]
print(animals.index('lama'))
0
count 方法(计数)
count方法返回值在元组中出现的次数。
In [88]
print(animals.count('lama'))
2
遍历元组
您可以使用for循环遍历元组的项目
In [89]
for item in ('lama', 'sheep', 'lama', 48):print(item)
lama sheep lama 48
元组拆包
元组对序列解包非常有用
In [91]
x, y = (7, 10);
print("Value of x is {}, the value of y is {}.".format(x, y))
Value of x is 7, the value of y is 10.
枚举
枚举函数返回一个元组,其中包含每次迭代的计数(从默认为0的开始)和迭代序列获得的值
In [93]
friends = ('Steve', 'Rachel', 'Michael', 'Monica')
for index, friend in enumerate(friends):print(index,friend)
(0, 'Steve') (1, 'Rachel') (2, 'Michael') (3, 'Monica')
元组相对列表的优势
列表和元组是标准Python数据类型,用于在序列中存储值。元组是不可变的,而列表是可变的。以下是元组列表的一些其他优点
组比列表更快。如果你要定义一组常量值,那么你将要做的就是迭代它,使用元组而不是列表。可以使用timeit库部分测量性能差异,该库允许您为Python代码计时。下面的代码为每个方法运行代码100万次,并输出所花费的总时间(以秒为单位)。
In [1]
import timeit
print('Tuple time: ', timeit.timeit('x=(1,2,3,4,5,6,7,8,9,10,11,12)', number=1000000))
print('List time: ', timeit.timeit('x=[1,2,3,4,5,6,7,8,9,10,11,12]', number=1000000))
('Tuple time: ', 0.0192110538482666) ('List time: ', 0.16498994827270508)
元组可以用作字典键
一些元组可以用作字典键(特别是包含不可变值的元组,如字符串,数字和其他元组)。列表永远不能用作字典键,因为列表不是不可变的
In [98]
bigramsTupleDict = {('this', 'is'): 23,('is', 'a'): 12,('a', 'sentence'): 2}print(bigramsTupleDict)
{('is', 'a'): 12, ('this', 'is'): 23, ('a', 'sentence'): 2}
列表不可以用作字典键
In [99]
bigramsListDict = {['this', 'is']: 23,['is', 'a']: 12,['a', 'sentence']: 2}print(bigramsListDict)
---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-99-834f1c969506> in <module>() ----> 1 bigramsListDict = {['this', 'is']: 23, 2 ['is', 'a']: 12, 3 ['a', 'sentence']: 2} 4 5 print(bigramsListDict) TypeError: unhashable type: 'list'
元组可以是集合中的值
In [50]
graphicDesigner = {('this', 'is'),('is', 'a'),('a', 'sentence')}
print(graphicDesigner)
set([('is', 'a'), ('this', 'is'), ('a', 'sentence')])
列表不可以是集合中的值
In [49]
graphicDesigner = {['this', 'is'],['is', 'a'],['a', 'sentence']}
print(graphicDesigner)
---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-49-008c17adfe8f> in <module>() 1 graphicDesigner = {['this', 'is'], 2 ['is', 'a'], ----> 3 ['a', 'sentence']} 4 print(graphicDesigner) TypeError: unhashable type: 'list'
Task: 用Python生成斐波那契序列
Fibonacci序列是一个整数序列,其特征在于前两个之后的每个数字是前两个数字的总和。根据定义,Fibonacci序列中的前两个数字是1和1,或0和1,具体取决于所选择的序列起点,以及每个后续数字是前两个数字的总和。
In [2]
print(1, 1, 2, 3, 5, 8, 13, 21, 34, 55)
1 1 2 3 5 8 13 21 34 55
1.使用循环,编写一个Python程序,打印出前10个Fibonacci数
In [24]
# Note, there are better ways to code this which I will go over in later videos
a,b = 1,1
for i in range(10):print("Fib(a): ", a, "b is: ", b)a,b = b,a+b
('Fib(a): ', 1, 'b is: ', 1) ('Fib(a): ', 1, 'b is: ', 2) ('Fib(a): ', 2, 'b is: ', 3) ('Fib(a): ', 3, 'b is: ', 5) ('Fib(a): ', 5, 'b is: ', 8) ('Fib(a): ', 8, 'b is: ', 13) ('Fib(a): ', 13, 'b is: ', 21) ('Fib(a): ', 21, 'b is: ', 34) ('Fib(a): ', 34, 'b is: ', 55) ('Fib(a): ', 55, 'b is: ', 89)
Python基础课程-常见的数据结构相关推荐
- Python 基础课程第八天
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Python 基础课程第八天 第6 章(1) 面向对象初步 方法没有重载 方法的动态性 私有属性和私有方法(实现封装) @proper ...
- python 基础课程第二天
文章目录 python 基础课程第二天 链式赋值 系列解包赋值 常量 最基本内置数据类型介绍 数字和基本运算符 整数 使用INT()实现类型转换: 自动转型: 整数可以多大 浮点数 类型转换和四舍五入 ...
- Python 基础课程第十天
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Python 基础课程第十天 第八章文件操作(IO 技术) 文本文件和二进制文件 文件操作相关模块概述 创建文件对象open() 文本 ...
- Python 基础课程第十一天
Python 基础课程第十一天 第七章模块(module) 1. 模块化(module)程序设计理念 1.1 模块和包概念的进化史 1.2 标准库模块(standard library) 1.3 为什 ...
- Python 基础课程第五天
Python 基础课程第五天 第四章:控制语句 循环结构 for循环和可迭代对象遍历 可迭代对象 range 对象 嵌套循环和综合练习 break 语句 continue 语句 else 语句 循环代 ...
- python 基础课程第三天
文章目录 python 基础课程第三天 字符串 可变字符串 基本运算符 复合赋值运算符 运算符优先级 序列 列表简介 列表的创建 基本语法[]创建 list()创建 range()创建整数列表 推导式 ...
- 【Python基础学习】基本数据结构:列表、元组、栈、字典、集合与队列
[Python基础学习]基本数据结构:列表.元组.栈.字典.集合与队列 Python的基本数据结构中,包含了列表.元组等一系列数组式数据结构,但各个结构各有不同.因此单独列出来,分析相同与不同 列表( ...
- Python基础课程-面向对象编程
Python面向对象编程 在本文中,您将学习Python中的OOP的以下基本概念: Python类 对象实例 定义和使用方法 OOP继承 什么是面向对象编程(OOP)? 面向对象编程(Object-o ...
- python基础课程多少钱-培训python多少钱 ?
现如今,随着人工智能的发展,Python真是越来越受欢迎了,已经有了超越其他编程语言的趋势.不少小伙伴想报个Python培训班学习python,却不知道培训python多少钱.下面我们就一起看看. 在 ...
最新文章
- php7 ext skel_基于PHP7的PHP扩展开发之一(hello word)
- Cookie简介及JSP处理Cookie的方法(转)
- 强化学习(二)—— 价值学习(Value-Based)及DQN
- Odd Grasshopper 奇偶找规律
- ubuntu 18.04无法开机 允许root用户桌面登录
- URAL 2045 Richness of words (回文子串,贪心)
- YbtOJ#893-带权的图【高斯消元,结论】
- codeforces1485 E. Move and Swap(dp)
- SQL Server Join方式
- idea快捷键,可摆脱鼠标
- 动规-Raucous Rockers
- POJ - 2187 Beauty Contest (求距离最远点对-凸包+旋转卡壳/枚举 (旋转卡壳学习))
- P3387 【模板】缩点
- 计算机组成原理:运算器组成实验(.八位串行可控加减法器等)
- java使用poi生成Excel文件并合并单元格
- 批量安装当前文件夹下的exe文件
- android 语音识别 离线,Android离线语音识别 PocketSphinx
- 一步步追踪Dialog的创建流程(一)
- CSUOJ 1726 你经历过绝望吗?两次!(BFS + 优先队列)
- jQuery 稳定、快速的CDN加速服务引用地址