# 2.1 数据类型和数据结构

### 原始数据类型

Python 有一些原始数据类型：

• 整数
• 浮点数
• 字符串（文本）

### 空类型

email_address = None


None 常用作可选值或缺失值的占位符。它在条件语句中计算为 False

if email_address:


### 数据结构

100 shares of GOOG at \$490.10


• 股票的名称或符号（"GOOG"，字符串）
• 股份数目（100，整数）
• 价格（490.10，浮点数）

### 元组

s = ('GOOG', 100, 490.1)


s = 'GOOG', 100, 490.1


t = () # An empty tuple
w = ('GOOG', ) # A 1-item tuple


s = ('GOOG', 100, 490.1)
name = s[0] # 'GOOG'
shares = s[1] # 100
price = s[2] # 490.1


>>> s[1] = 75
TypeError: object does not support item assignment


s = (s[0], 75, s[2])


### 元组打包

s = ('GOOG', 100, 490.1)


### 元组拆包

name, shares, price = s
print('Cost', shares * price)


name, shares = s # ERROR
Traceback (most recent call last):
...
ValueError: too many values to unpack


### 元组与列表

record = ('GOOG', 100, 490.1) # A tuple representing a record in a portfolio
symbols = [ 'GOOG', 'AAPL', 'IBM' ] # A List representing three stock symbols


### 字典

s = {
'name': 'GOOG',
'shares': 100,
'price': 490.1
}


### 常见操作

>>> print(s['name'], s['shares'])
GOOG 100
>>> s['price']
490.10
>>>


>>> s['shares'] = 75
>>> s['date'] = '6/6/2007'
>>>


>>> del s['date']
>>>


### 为什么使用字典？

s['price']
# vs
s[2]


## 练习

>>> import csv
>>> f = open('Data/portfolio.csv')
>>> next(rows)
['name', 'shares', 'price']
>>> row = next(rows)
>>> row
['AA', '100', '32.20']
>>>


>>> row = ['AA', '100', '32.20']
>>> cost = row[1] * row[2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'str'
>>>


### 练习 2.1：元组

>>> t = (row[0], int(row[1]), float(row[2]))
>>> t
('AA', 100, 32.2)
>>>


>>> cost = t[1] * t[2]
>>> cost
3220.0000000000005
>>>


>>> print(f'{cost:0.2f}')
3220.00
>>>


>>> t[1] = 75
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>>


>>> t = (t[0], 75, t[2])
>>> t
('AA', 75, 32.2)
>>>


>>> name, shares, price = t
>>> name
'AA'
>>> shares
75
>>> price
32.2
>>>


>>> t = (name, 2*shares, price)
>>> t
('AA', 150, 32.2)
>>>


### 练习 2.2：把字典当作数据结构

>>> d = {
'name' : row[0],
'shares' : int(row[1]),
'price' : float(row[2])
}
>>> d
{'name': 'AA', 'shares': 100, 'price': 32.2 }
>>>


>>> cost = d['shares'] * d['price']
>>> cost
3220.0000000000005
>>>


>>> d['shares'] = 75
>>> d
{'name': 'AA', 'shares': 75, 'price': 32.2 }
>>>


>>> d['date'] = (6, 11, 2007)
>>> d['account'] = 12345
>>> d
{'name': 'AA', 'shares': 75, 'price':32.2, 'date': (6, 11, 2007), 'account': 12345}
>>>


### 练习 2.3: 字典的其它操作

>>> list(d)
['name', 'shares', 'price', 'date', 'account']
>>>


>>> for k in d:
print('k =', k)
k = name
k = shares
k = price
k = date
k = account
>>>


>>> for k in d:
print(k, '=', d[k])
name = AA
shares = 75
price = 32.2
date = (6, 11, 2007)
account = 12345
>>>


>>> keys = d.keys()
>>> keys
dict_keys(['name', 'shares', 'price', 'date', 'account'])
>>>


>>> del d['account']
>>> keys
dict_keys(['name', 'shares', 'price', 'date'])
>>>


>>> items = d.items()
>>> items
dict_items([('name', 'AA'), ('shares', 75), ('price', 32.2), ('date', (6, 11, 2007))])
>>> for k, v in d.items():
print(k, '=', v)
name = AA
shares = 75
price = 32.2
date = (6, 11, 2007)
>>>


>>> items
dict_items([('name', 'AA'), ('shares', 75), ('price', 32.2), ('date', (6, 11, 2007))])
>>> d = dict(items)
>>> d
{'name': 'AA', 'shares': 75, 'price':32.2, 'date': (6, 11, 2007)}
>>>


## 翻译：《实用的Python编程》02_01_Datatypes的更多相关文章

1. 翻译&quot;Python编程无师自通——专业程序员的养成&quot;

这本书在 畅销Python编程类入门书,美国亚马逊Kindle编程类排行榜榜一. 开始初学python,也有不少书了,不想在白花钱(买了就放那里不看了),看一个英文文档的原著,准备每天翻译一点,放到b ...

2. Python黑帽编程2.1 Python编程哲学

Python黑帽编程2.1  Python编程哲学 本节的内容有些趣味性,涉及到很多人为什么会选择Python,为什么会喜欢这门语言.我带大家膜拜下Python作者的Python之禅,然后再来了解下P ...

3. Python 编程规范-----转载

Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器,默认保存为 utf-8 格式. ...

4. 学习Python编程的11个精品资源

本文由 伯乐在线 - atupal 翻译自 Alex Ivanovs.欢迎加入技术翻译小组.转载请参见文章末尾处的要求. 用 Python 写代码并不难,事实上,它一直以来都是被声称为最容易学习的编程 ...

5. 关于Python编程的一些问答

关于Python编程的一些问答 导语 大约1个月前,oschina.net和华章图书一起合作做了一个活动:OSC第51期高手问答--聊聊python那些事,来推广我参与撰写的书<编写高质量代码: ...

6. python经典书记必读：Python编程快速上手 让繁琐工作自动化

所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/69/ 来源:python黑洞网,专注 ...

7. CS231n课程笔记翻译1：Python Numpy教程

译者注:本文智能单元首发,翻译自斯坦福CS231n课程笔记Python Numpy Tutorial,由课程教师Andrej Karpathy授权进行翻译.本篇教程由杜客翻译完成,Flood Sung ...

8. 学习 Python 编程的 19 个资源 （转）

学习 Python 编程的 19 个资源 2018-01-07 数据与算法之美 编译:wzhvictor,英文:codecondo segmentfault.com/a/119000000418731 ...

9. Python学习手册之 Python 之禅、Python 编程规范和函数参数

在上一篇文章中,我们介绍了 Python 的正则表达式使用示例,现在我们介绍 Python 之禅. Python 编程规范和函数参数.查看上一篇文章请点击:https://www.cnblogs.co ...

10. Python编程笔记二进制、字符编码、数据类型

Python编程笔记二进制.字符编码.数据类型 一.二进制 bin() 在python中可以用bin()内置函数获取一个十进制的数的二进制 计算机容量单位 8bit = 1 bytes 字节,最小的存 ...

## 随机推荐

2. Redis和Memcached对比

Redis和Memcached对比 这两年 Redis火得可以,Redis也常常被当作 Memcached的挑战者被提到桌面上来.关于Redis与Memcached的比较更是比比皆是.然而,Redis ...

3. BZOJ 1143 [CTSC2008]祭祀river（二分图匹配）

[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1143 [题目大意] 给出一张有向图,问最大不连通点集,连通具有传递性 [题解] 我们将 ...

4. 希腊字母、拉丁字母、Markdown、拼写与读音中英对照表

大写 小写 中文名 英文 大写Markdown 小写Markdown 意义 阿尔法 Alpha A \alpha 角度.系数.角加速度.第一个.电离度.转化率 贝塔/毕塔 Beta B \beta 磁 ...

5. jackson对日期的处理（序列化与反序列化）

https://blog.csdn.net/cover1231988/article/details/76021478

6. mac相关功能

打开和关闭索引功能 打开:sudo mdutil -a -i on 关闭:sudo mdutil -a -i off 关闭后则无法搜

7. SpringCloud第一弹(入门)

使用IDEA建立SpringBoot多模块工程不爽啊~算了凑合用吧. 第一步.建立一个POM工程 ..Next ..一路next即可,中间啥也不选 第二步.建立Eureka服务器(这个玩意等同于玩Du ...

8. 让Linux系统开机速度更快的方法

进行 Linux 内核与固件开发的时候,往往需要多次的重启,会浪费大把的时间. 在所有我拥有或使用过的电脑中,启动最快的那台是 20 世纪 80 年代的电脑.在你把手从电源键移到键盘上的时候,BASI ...

9. 多表关联解决数据在MVC显示

由于子表的某些字段是父表的外键,正常情况之下,显示的只是一个键值.如下图的Highlight列,如果这样显示,确实不友好. 如果是在创建或是编辑的模式之下,我们可以使用下拉菜单来解决,如<Htm ...

10. Python入门与基本概念

简介:本学习笔记基于ubuntu,Ubuntu已经内置了python2.7,python2.7既包含老版本的属性,有含有新版本的一些特性,用于对3．x版本的过渡,可以拿来入门学习,入门之后可以再学习p ...