字典

字典是将键(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基础课程-常见的数据结构相关推荐

  1. Python 基础课程第八天

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Python 基础课程第八天 第6 章(1) 面向对象初步 方法没有重载 方法的动态性 私有属性和私有方法(实现封装) @proper ...

  2. python 基础课程第二天

    文章目录 python 基础课程第二天 链式赋值 系列解包赋值 常量 最基本内置数据类型介绍 数字和基本运算符 整数 使用INT()实现类型转换: 自动转型: 整数可以多大 浮点数 类型转换和四舍五入 ...

  3. Python 基础课程第十天

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Python 基础课程第十天 第八章文件操作(IO 技术) 文本文件和二进制文件 文件操作相关模块概述 创建文件对象open() 文本 ...

  4. Python 基础课程第十一天

    Python 基础课程第十一天 第七章模块(module) 1. 模块化(module)程序设计理念 1.1 模块和包概念的进化史 1.2 标准库模块(standard library) 1.3 为什 ...

  5. Python 基础课程第五天

    Python 基础课程第五天 第四章:控制语句 循环结构 for循环和可迭代对象遍历 可迭代对象 range 对象 嵌套循环和综合练习 break 语句 continue 语句 else 语句 循环代 ...

  6. python 基础课程第三天

    文章目录 python 基础课程第三天 字符串 可变字符串 基本运算符 复合赋值运算符 运算符优先级 序列 列表简介 列表的创建 基本语法[]创建 list()创建 range()创建整数列表 推导式 ...

  7. 【Python基础学习】基本数据结构:列表、元组、栈、字典、集合与队列

    [Python基础学习]基本数据结构:列表.元组.栈.字典.集合与队列 Python的基本数据结构中,包含了列表.元组等一系列数组式数据结构,但各个结构各有不同.因此单独列出来,分析相同与不同 列表( ...

  8. Python基础课程-面向对象编程

    Python面向对象编程 在本文中,您将学习Python中的OOP的以下基本概念: Python类 对象实例 定义和使用方法 OOP继承 什么是面向对象编程(OOP)? 面向对象编程(Object-o ...

  9. python基础课程多少钱-培训python多少钱 ?

    现如今,随着人工智能的发展,Python真是越来越受欢迎了,已经有了超越其他编程语言的趋势.不少小伙伴想报个Python培训班学习python,却不知道培训python多少钱.下面我们就一起看看. 在 ...

最新文章

  1. php7 ext skel_基于PHP7的PHP扩展开发之一(hello word)
  2. Cookie简介及JSP处理Cookie的方法(转)
  3. 强化学习(二)—— 价值学习(Value-Based)及DQN
  4. Odd Grasshopper 奇偶找规律
  5. ubuntu 18.04无法开机 允许root用户桌面登录
  6. URAL 2045 Richness of words (回文子串,贪心)
  7. YbtOJ#893-带权的图【高斯消元,结论】
  8. codeforces1485 E. Move and Swap(dp)
  9. SQL Server Join方式
  10. idea快捷键,可摆脱鼠标
  11. 动规-Raucous Rockers
  12. POJ - 2187 Beauty Contest (求距离最远点对-凸包+旋转卡壳/枚举 (旋转卡壳学习))
  13. P3387 【模板】缩点
  14. 计算机组成原理:运算器组成实验(.八位串行可控加减法器等)
  15. java使用poi生成Excel文件并合并单元格
  16. 批量安装当前文件夹下的exe文件
  17. android 语音识别 离线,Android离线语音识别 PocketSphinx
  18. 一步步追踪Dialog的创建流程(一)
  19. CSUOJ 1726 你经历过绝望吗?两次!(BFS + 优先队列)
  20. jQuery 稳定、快速的CDN加速服务引用地址

热门文章

  1. 855 Plus+四摄+90Hz流体屏,这款新旗舰给力不贵
  2. Linux的XServer
  3. JAVA--一对一聊天
  4. 闪电网络预备知识二:微支付通道
  5. 2021年G1工业锅炉司炉新版试题及G1工业锅炉司炉模拟考试题
  6. 从零学Java(7)之数据类型,小AD竟然solo不过小朋友
  7. 查看cuda版本以及torch版本
  8. nokia x android 界面,Nokia X家族上手体验:它安卓了就活了么?
  9. 网易云音乐 Linux 版无法打开的解决方法.
  10. libdmtx库的配置与OpenCV4.5的安装