Python数据类型详解

Python基本数据类型

  • 数字

数字

分为整型、浮点型、布尔型、复数

  1. 整型(int)
  2. 浮点型(float)
  3. 布尔型(bool)
  4. 复数(complex)

  1. 序列
  • 字符串(str)
  • 列表(list)
  • 元组(tuple)
  1. 集合(set)
  2. 字典(dict)

数字(Number)

  • 整型(int)、浮点型(float)
1
type(1)
-1
type(-1)
type(1.1)
type(1.11111111111111111111111111111111)
1+0.1
type(1+0.1)
type(1+1)
type(1+1.0)
type(1*1)
type(1*1.0)
type(2/2)
type(2//2)
1//2
  • 进制(十进制、二进制、八进制、十六进制)
  1. 如何进位
    逢十进一、 逢二进一、 逢八进一、 逢十六进一
  2. 进制表示
    二进制: 0b开头
    八进制: 0o开头
    十六进制:0x开头
  3. 案例
0b10
0b11
0o10
0o11
0x10

#转二进制
print(bin(10))
print(bin(0o7))
print(bin(0xE))
#转八进制
print(oct(0b111))
print(oct(0x777))
#转十进制
print(int(0b10))
print(int(0o77))
#转十六进制
print(hex(888))
print(hex(0o777))
  1. 其他进制
    比如60s=1minute
  • 布尔型(bool)
    bool类型表示真假。
True
False
type(True)
type(False)
int(True)
int(False)
bool(1)
bool(0)

#非0代表True,0假
bool(2.2)
bool(0b01)
bool(0b0)
#其他类型也可以转bool
bool("abc")
bool("")
bool([1,2,3])
bool([])
bool({1,2,3})
bool({})
bool(None)

结论:除了0表示False外,其他类型的空值也为False

  • 复数(complex)
    数字后加j
36j

现实中总是存在一组一组的事物。


  1. 序列
  • 字符串(str)

宣室求贤访逐臣,贾生才调更无伦。
可怜夜半虚前席,不问苍生问鬼神。

字符串是由独立字符组成的一个序列,通常包含在单引号('')双引号(""))或者三引号之中(''' ''' 或""" """)

'helloworld'
"let's go"
"""hello
world
"""

单引号换行

print("hello\nworld\n")
print('hello \
      world')

转义字符
特殊字符
无法"看见"的字符
与语言本身语法有冲突的字符
常见的转义字符
\n 换行
\' 单引号
\t 横向制表符
\r 回车

思考:print("c\nworld\ntesd")打印: 两行,现在想打印一行即 c\nworld\ntesd如何实现?
答案见末尾。
\color{red}{字符串运算}

1)字符串合并

"hello"+"world"
"hello"*3

2)字符串替换

"hello".replace('h','w') ->wello

3)获取单个字符
通过索引获取

'hello'[0] ->h
'hello'[-1] ->o

【-n】:从字符串末尾,往前数n次,获取字符
4)字符串切片
切片 ,左闭右开 [)

"helloworld"[0:4]->hell
"helloworld"[0:-1]->helloworl
#获取world
"helloworld"[5:] -> world

"hello python java javascript ruby go" 仅获取go

"hello python java javascript ruby go" [-2:]

5)字符串格式化
format()

print('name={}age={}'.format("张三",20))
print('name={0}age={1}'.format("张三",20))
print('name={name}age={age}'.format(age=20,name='张三'))

6)查找元素find ,index
通过元素找索引找到第一个就返回,找不到返回-1

a="javascript"
print(a.find('a')) # 1
print(a.find('m')) # -1
print(a.index('v'))# 2

7)split 把字符串分割成列表

s = 'java python go'
s1 = 'java;x python;sir bar;ryy'

print(s.split()) #['java', 'python', 'go']
print(s1.split(";"))# ['java', 'x python', 'sir bar', 'ryy']

8)join()
join将序列中的元素以指定的字符连接生成一个新的字符串

s = 'alex' ####看成字符列表
li = ['aa', 'ddj', 'kk']    #### 必须全是字符串
s1 = '_'.join(s)
print(s1)
s2 = ' '.join(li)
print(s2)
  • 列表(list)
    1)列表概念
    实际上,列表和元组,都是一个可以放置任意数据类型的有序集合
    2)列表的创建
    []表示空列表
[1,2,3]

使用list()函数将元组、range对象、字符串或其他类型的可迭代对象类型的数据转换为列表

list("abc") 
['a', 'b', 'c']

3)在绝大多数编程语言中,集合的数据类型必须一致。不过,对于 Python 的列表和元组来说,并无此要求:

l = [1, 2, 'hello', 'world'] # 列表中同时含有 int 和 string 类型的元素
l
[1, 2, 'hello', 'world']

tup = ('jason', 22) # 元组中同时含有 int 和 string 类型的元素
tup
('jason', 22)

列表的元素还可以是列表,称为嵌套列表

[[1,2],[3,4],[True,False]]

2,列表操作
2.1 列表增加

  • 列表元素添加-append()
    向列表尾部追加一个元素,不改变其内存首地址,属于原地操作。 例如:
x = [1,2,3]
x.append(4)
x
[1,2,3,4]
  • 列表元素添加-insert()
    向列表任意位置插入一个元素,不改变其内存首地址,属于原地操作。
x = [1,3,4]
x.insert(1,2)
x
[1,2,3,4]
  • 列表元素添加-extend()
    将另一个迭代对象的所有元素添加至该列表对象尾部,不改变其内存首地址,属于原地操作。
x = [1,2]
x.extend([3,4])
x
[1,2,3,4]

2.2运算符"+"和*
并不是真的为列表添加元素,而是创建一个新列表,不属于原地操作,而是返回新列表。

  • 列表加法
[1,2,3]+[4,5,6] 
 [1,2,3,4,5,6]
  • 列表乘法
x=[1,2,3]
y=x*3
y
[1,2,3,1,2,3,1,2,3]

此时x保持不变,依旧是[1,2,3]

[1,2,3][0] ->1
[1,2,3][0:2]-> [1,2]
[1,2,3][-1:]->[3]  注意:结果是列表 

2.3列表元素删除

  • pop()
    使用列表的pop()方法删除并返回指定(默认为最后一个)位置上的元素,如果给定的索引超出了列表的范围则抛出异常。
x = [1,2,3,4]
x.pop()   #弹出并返回尾部元素
x.pop(1) #弹出并返回指定位置的元素
2
  • remove()
    删除首次出现的指定元素,如果列表中不存在要删除的元素,则抛出异常。
x = [1,2,2,3,4]
x.remove(2)
x
[1,2,3,4]
  • clear()
    清空列表
x = [1,2,3,4]
x.clear()
x
[ ]
  • del()
    删除列表中的指定位置上的元素。
x = [1,2,3,4]
del x[1]
x
[1,3,4]

2.4列表中常用内置函数

  • len()
    返回列表中的元素个数,同样适用于元组、字典、集合、字符串等。

  • max()、 min()
    返回列表中的最大或最小元素,同样适用于元组、字典、集合、range对象等。

  • sum()
    对列表的元素进行求和运算。

  • zip()
    返回可迭代的zip对象。

  • enumerate()
    枚举列表元素,返回枚举对象,其中每个元素为包含下标和值的元组。该函数对元组、字符串同样有效。

for item in enumerate('abcdef'):
print(item)
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')
(4, 'e')
 (5, 'f')

2.5遍历列表的三种方式

a = ['a','b','c','d','e','f']
for i in a:
    print(i)

for i in range(len(a)):
    print(i,a[i])
for i,ele in enumerate(a):
    print(i,ele)
  • 元组(tuple)
    元组属于不可变序列,一旦创建,用任何方法都不可以修改其元素。从形式上,元组的所有元素放在一对圆括号中,元素之间用逗号分隔。

1)元组的创建

(1,2,3,4,5)
(1,2,3,4,5)[0]
(1,2,3,4,5)[0:]
(1,2,3,4,5)+(6,7) 
 (1,2,3,4,5,6,7)
(1,2,3)*3
(1,2,3,1,2,3,1,2,3)

思考题:
type((1)) ,type(('helo')),结果是?为什么?

原因; ()既可以表示数学运算,也表示了元组,在这个例子中,编译器不知道()表示什么,就按照数学运算表示了。
那么,如何定义只有一个元素的元组呢?

(1,)
type((1,))->tuple

2) 使用tuple函数将其他序列转换为元组

tuple("abc")
('a', 'b', 'c')

3)元组的优点

  • 元组的速度比列表更快。
  • 元组对不需要改变的数据进行“写保护”将使得代码更加安全。
  • 元组可用作字典键(特别是包含字符串、数值和其它元组这样的不可变数据的元组)。元组有时还作为函数的返回值返回(返回多个值)。

总结
1). 实际上,列表和元组,都是一个可以放置任意数据类型的有序集合
2). 列表是动态的,长度大小不固定,可以随意地增加、删减或者改变元素(mutable)。而元组是静态的,长度大小固定,无法增加删减或者改变(immutable)。

a=[1,2,3]
a.append(4)

3.增加元素,列表用append()而元组只能创建新的元组。
4)str list tuple都是序列;

序列特点
1)都可以通过索引访问
2)都具有切片功能

"helloworld"[0:8:2]

3)in关键字判断元素是否在序列中

3 in [1,2,3,4] ->True
3 not in [1,2,3] -> False

4)序列长度、最大值、最小值

len([1,2,3]) ->3
max([1,2,5])->5
min([1,2,5])->1

ASCII码值:

ord('a')

列表和元组常用方法

l = [3, 2, 3, 7, 8, 1]
l.count(3) 
l.index(7)
l.reverse()
l.sort()

tup = (3, 2, 3, 7, 8, 1)
tup.count(3)
tup.index(7)
list(reversed(tup))
sorted(tup)

count(item) 表示统计列表 / 元组中 item 出现的次数。
index(item) 表示返回列表 / 元组中 item 第一次出现的索引。
list.reverse()list.sort() 分别表示原地倒转列表和排序(注意,元组没有内置的这两个函数)。
reversed()sorted() 同样表示对列表 / 元组进行倒转和排序,但是会返回一个倒转后或者排好序的新的列表 / 元组。

  1. 集合(set)
    1)集合的定义
    集合是无序可变序列,使用一对大括号界定,元素不可重复,同一个集合中每个元素都是唯一的。集合中只能包含数字、字符串、元组等不可变类型的数据,而不能包含列表、字典、集合等可变类型的数据。
    2)集合的创建
{}
{1,2,3}

定义空集合

{} 
set()

3)集合元素的增加与删除

  • 增加元素
    使用add()方法为集合添加新元素,如果该元素已存在于集合中则忽略该操作。
s = {1,2,3}
s.add(3)
s
{1,2,3}

使用update()方法合并另外一个集合中的元素到当前集合中

s = {1,2,3}
s.update({3,4,5})
s
{1,2,3,4,5}
  • 删除元素
    当不再使用某个集合时,可以使用del命令删除整个集合。集合对象的pop()方法弹出并删除其中一个元素,remove()方法直接删除指定元素,clear()方法清空集合。
 a = {1, 4, 2, 3}
 a.pop()
1
 a.pop()
2
a
{3, 4}
 a.add(2)
 a
{2, 3, 4}
 a.remove(3)
 a
{2, 4}

4)集合操作
移除集合中的元素, "-"号求差集

{1,2,3,4} -{3,4} ->{1,2}

求交集

{1,2,3,4} & {3,4} ->{3,4}

求并集

{1,2,3,4} | {3,4} ->{1,2,3,4}

tip
集合无法通过下标和切片访问

s={1,2,3}
print(s[0])

Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/movie/core.py", line 4, in <module>
    print(s[0])
TypeError: 'set' object does not support indexing
  1. 字典(dict)


1)字典概念
字典(dictionary)是包含若干“键:值”元素的无序可变序列,字典中的每个元素包含“键”和“值”两部分,定义字典时,每个元素的键和值用冒号分隔,元素之间用逗号分隔,所有的元素放在一对大括号“{}”中。字典中的键可以为任意不可变数据,比如整数、实数、字符串、元组等等。
2)字典的创建

{} #空字典
{1:1,2:2}
type({1:1,2:2})

3)字典元素的读取
以键作为下标可以读取字典元素,若键不存在则抛出异常

{"q":1,"w":2}["q"]->1

使用字典对象的get方法获取指定键对应的值,并且可以在键不存在的时候返回指定值。

a={"name":"张三"}
print(a.get("name"))
a={"name":"张三"}
print(a.get("age",20))

使用字典对象的items()方法可以返回字典的键、值对列表

a={"name":"张三"}
print(a.items()) # dict_items([('name', '张三')])

使用字典对象的keys()方法可以返回字典的键列表

a={"name":"张三","age":21}
print(a.keys()) # dict_keys(['name', 'age'])

使用字典对象的values()方法可以返回字典的值列表

a={"name":"张三","age":21}
print(a.values()) # dict_values(['张三', 21])

使用字典对象的setdefault()方法返回指定“键”对应的“值”,如果字典中不存在该“键”,就添加一个新元素并设置该“键”对应的“值”,如果字典中存着该"键",就不做任何操作,只是返回该"键"在字典中的值。

a={"name":"张三","age":21}
re=a.setdefault("sex","male")
print(re)  #male
print(a.values()) # dict_values(['张三', 21, 'male'])

4)字典元素的添加
当以指定键为下标为字典赋值时,若键存在,则可以修改该键的值;若不存在,则表示添加一个键、值对。

person={"name":"张三","age":21}
person['name']="lisi"
person["sex"]="male"
print(person)

5)字典删除

  • 字典clear()方法
    clear()方法是用来清除字典中的所有数据,因为是原地操作,所以返回None(也可以理解为没有返回值)
person={"name":"张三","age":21}
person.clear()
print(person) # {}
  • 字典pop()方法
    pop()删除指定给定键所对应的值,返回这个值并从字典中把它移除。
x = {'a':1,'b':2}
print(x.pop('a')) # 1
print(x) #{}
  • 字典popitem()方法
    字典popitem()方法作用是:随机返回并删除字典中的一对键和值(项)。为什么是随机删除呢?因为字典是无序的,没有所谓的“最后一项”或是其它顺序。在工作时如果遇到需要逐一删除项的工作,用popitem()方法效率很高。
x = {'a':1,'b':2}
print(x.popitem()) # ('b':2)
print(x) #{'a':1}

6)判断一个key是否在字典中
使用in方法

#生成一个字典
d = {'name':'tom', 'age':10, 'Tel':110}
#打印返回值,其中d.keys()是列出字典所有的key
print ('name'  in d.keys())
print ('name' in d)
#两个的结果都是返回True

7)字典遍历

  • 遍历key值
{'a': '1', 'b': '2', 'c': '3'}
for key in a:
       print(key+':'+a[key])
a:1
b:2
c:3
  • 遍历value值
for value in a.values():
       print(value)
  • 遍历字典项
for kv in x.items():
    print(kv)
  • 遍历字典健值
for (k,v) in x.items():
    print("k={},v={}".format(k,v))

tip:
在字典中,key不能相同,且必须是不可变的类型
思考:下面两个字典,有什么问题?

{[1,2]:1}
{(1,2):1}

答案
方法一: print('c\nworld\ntest')
解决方法2: print(r'c\nworld\ntest') ->加入r后,变成原始字符串,\不具备转义字符能力

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,552评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,666评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,519评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,180评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,205评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,344评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,781评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,449评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,635评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,467评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,515评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,217评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,775评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,851评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,084评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,637评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,204评论 2 341

推荐阅读更多精彩内容

  • Python(英语发音:/ˈpaɪθən/), 是一种面向对象、解释型计算机程序设计语言,由Guido van R...
    TitanCoder阅读 252评论 0 1
  • 数值类型 整数类型 int Python 3 之后,整数类型为 int ,不在区分整型与长整型,(Python2....
    三十六_阅读 1,208评论 0 2
  • 原文博客地址: Python数据类型详解03 第一篇Python数据类型详解01中主要介绍了Python中的一些常...
    TitanCoder阅读 419评论 0 1
  • 原文博客地址: Python数据类型详解02 上文Python数据类型详解01中主要介绍了Python中的一些常用...
    TitanCoder阅读 793评论 2 1
  • 1.如何学好你的专业? 诚信守时勤奋是前提。 存在的价值在于不可替代。 (需要责任心,吃苦,写作,做事能力,专业修...
    安之若素的小年轻阅读 263评论 0 0