一起学Python——数据类型详解
和学习其他编程语言一样,首先要了解一门语言的数据类型。
Python的数据类型有整型、浮点型、字符串、布尔型、日期时间类型、list列表、set集合、tuple元组、dict词典等。
1、整型
就是数学中的整数,包括负整数。
定义整型的方法:
a = 100
b = -100
print(a)
print(b)
结果:
100
-100
Python定义变量的语法和其他的编程语言不一样,例如Java定义整型变量的语法:int a = 10;
Python是根据你的变量的值来确定变量的类型。
a = 12就是整型,a = "abc"就是字符串。
2、浮点型
就是数学中的小数。例如:
a = 12.3
print(a)
变量a为浮点型。如果浮点变量的值很多或者很小,则建议用科学计数法定义一个浮点变量。例如:
a = 3.14e9
print(a)。
**3、字符串 **
用单引号'、双引号"或者'''三引号扩起来的文本。
下面的代码定义了三个变量,str1和str2的值都是123qaz。
str3的值为:
123qaz
456wsx
'''三引号用于定义多行字符串。
str1 = '123qaz'
str2 = "123qaz"
str3 = '''123qaz
456wsx'''
print(str1)
print(str2)
print(str3)
4、布尔型
只有True和False两个值,例如:
flag True
print(flag)
flag False
print(flag)
布尔类型一般用作条件判断,例如:
a = 1
b = 2
if a > b:
print(a)
else:
print(b)
布尔类型还可以用于or、and和not逻辑运算。
or逻辑或运算,当两个布尔变量的值有一个为True时,结果就是True,所有的布尔类型的数值都为False时,结果才是False。例如:
flag1 = True
flag2 = False
print(flag1 or flag1)
flag3 = False
flag4 = False
print(flag3 or flag4)
打印结果:
True
False
and逻辑与运算,只有所有的布尔变量为True是,结果才是True,否则结果是False,例如:
flag1 = True
flag2 = False
print(flag1 and flag1)
flag3 = True
flag4 = True
print(flag3 or flag4)
not逻辑非运算,not False的结果为True,not True的结果为False,这是一个单目逻辑运算符。
5、日期时间类型
Python提供了time模块处理时间。
获取当前时间戳:
>>> import time
>>> print(time.time())
1541082277.3144386
time()函数返回的是浮点数。
localtime()函数返回的是一个struct_time元组,struct_time元组中有9个元素,分别代表年、月、日、小时等。
>>> print(time.localtime(time.time()))
time.struct_time(tm_year=2018, tm_mon=11, tm_mday=1, tm_hour=22, tm_min=30, tm_sec=56, tm_wday=3, tm_yday=305, tm_isdst=0)
struct_time元组中每个元素代表的意义如下:
属性 | 值 | 代表的意义 |
---|---|---|
tm_year | 2018 | 年 |
tm_mon | 1-12 | 月 |
tm_mday | 1-31 | 日 |
tm_hour | 0-23 | 小时 |
tm_min | 0-59 | 分钟 |
tm_sec | 0-61 | 秒,61是闰秒 |
tm_wday | 0-6 | 周一到周日,0是周一 |
tm_yday | 1-366 | 一年中的第几日 |
tm_isdst | 0,1,-1 | 夏令时标识,1是夏令时,0不是夏令时,默认值是-1 |
strftime()方法将时间转化为字符串,具体用法如下:
>>> print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))#精确到秒的日期格式
2018-11-01 23:00:36
>>> print(time.strftime('%Y',time.localtime()))#显示年份
2018
>>> print(time.strftime('%m',time.localtime()))#月份
11
>>> print(time.strftime('%d',time.localtime()))#显示日
01
>>> print(time.strftime('%H:%M:%S',time.localtime()))#显示当前的时间
23:01:19
>>> print(time.strftime('%Y-%m-%d',time.localtime()))#显示当前的日期
2018-11-01
>>> print(time.strftime('%U',time.localtime()))#显示一年当中的第几周
43
>>> print(time.strftime('%w',time.localtime()))#显示周几,4表示周四,0表示周日
4
``` python
两个日期相减。
如果日期是字符串形式,则必须转为秒数才能相减:
``` python
>>> import datetime
>>> from_time = "2018-11-01 10:10:20"
>>> to_time = "2017-12-23 12:12:12"
>>> d = datetime.datetime.strptime(from_time,"%Y-%m-%d %H:%M:%S")
>>> b = datetime.datetime.strptime(to_time,"%Y-%m-%d %H:%M:%S")
>>> print(time.mktime(d.timetuple()) - time.mktime(b.timetuple()))
27035888.0
datetime.datetime.strptime()方法将字符串格式的日期转换为struct_time元组,time.mktime()方法将struct_time元组日期转为秒。
字符串日期格式和秒互转
字符串日期格式转为秒:
from_time = "2018-11-01 23:36:35"
d = datetime.datetime.strptime(from_time,"%Y-%m-%d %H:%M:%S")
from_time_float = time.mktime(d.timetuple())
秒转为字符串日期格式:
current_time = time.time()
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(current_time)))
6、列表list
Python中常用的数据类型,用[]将所有元素括起来的集合。列表中的元素可以是任意类型,例如字符串、数字类型、布尔类型等,还可以是列表。列表中的元素通过“,”逗号分隔,列表中的元素可以修改。
创建一个列表:
list1 = [1,'abc',True]
列表list1有三元素,数字类型1,字符串“abc”,布尔类型True。
读取列表元素:
通过索引访问列表中的元素,下面是访问第三个元素的方法:
>>> list1 = [1,'abc',True]
>>> print(list1[2])
True
将2变为-2时就是读取倒数第2个元素:
>>> list1[-2]
'abc'
索引-1是读取最后一个元素:
>>> list1[-1]
True
当索引越界时出报“IndexError: list index out of range”列表索引超出范围的错误。
>>> print(list1[4])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
求列表长度:
>>> list1 = [1,'abc',True]
>>> print(len(list1))
3
替换列表元素:
通过索引可以直接替换掉列表指定位置的元素,注意索引越界。下面代码将list1列表第二个元素从abc变为def
>>> list1 = [1,'abc',True]
>>> print(list1)
[1, 'abc', True]
>>> list1[1]='def'
>>> print(list1)
[1, 'def', True]
pop方法删除列表元素:
>>> list1 = [1,'abc',True]
>>> list1.pop()
True
>>> print(list1)
[1, 'abc']
>>> list1.pop(0)
1
>>> print(list1)
['abc']
pop()方法删除最有一个元素,pop(j)方法删除指定元素,j是索引,注意索引越界的问题。
截取列表:
>>> list1 = ['a','b','c','d','e','f','g']
>>> list2 = list1[2:4]#截取从list1的第三个元素开始到第五个元素截止生成新的列表list2
>>> print(list2)
['c', 'd']
>>> list3 = list1[2:]#从list1列表的第三个元素开始截取生成列表list3
>>> print(list3)
['c', 'd', 'e', 'f', 'g']
列表相加:
两个列表通过+符号生成新的列表
>>> list1 = ['a','b','c','d','e','f','g']
>>> list2 = [1,2,3]
>>> list3 = list1 + list2
>>> print(list3)
['a', 'b', 'c', 'd', 'e', 'f', 'g', 1, 2, 3]
7、tupple元组
使用()将不同类型元素括起来的集合,元组的特点是数据不能修改。
和list列表一样,tupple中的元素不限制类型,既可以是整型,也可以是布尔型、list列表等,元素之间用逗号分隔。
创建一个tuple:
>>> tuple_a = (1,'abc',False)
>>> print(tuple_a)
(1, 'abc', False)
如果创建的tuple只有一个元素时,必须在唯一的一个元素后面加上“,”来消除歧义:
>>> tuple_c = (1)
>>> print(tuple_c)
1
>>> tuple_d = (1,)
>>> print(tuple_d)
(1,)
通过上面的代码可知,如果不在唯一的一个元素后面加上一个",",Python就会认为tuple_c是数字1而不是创建一个tuple实例。
试图修改tuple中的元素时会报TypeError: 'tuple' object does not support item assignment的错误:
>>> tuple_a[0] = 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
读取tupple中的元素:
>>> tupple_a = (1,'abc',False)
>>> print(tupple_a[2])
False
虽然tuple中的元素是不可修改的,但是可以在创建的tuple实例中添加一个list元素,达到元素可变的目的:
>>> tuple_a = (1,[2,'abc'])
>>> print(tuple_a)
(1, [2, 'abc'])
>>> tuple_a[1][1]='def'
>>> print(tuple_a)
(1, [2, 'def'])
上面的代码达到了修改tuple实例中元素的目的。
和list列表一样,,tuple也支持tuple相加、截取的操作:
>>> tuple_a = (1,2)
>>> tuple_b = ('a','b')
>>> tuple_c = tuple_a + tuple_b #两个tuple相加
>>> print(tuple_c)
(1, 2, 'a', 'b')
>>> print(tuple_c[1:3])#截取tuple
(2, 'a')
>>> print(tuple_c[1:])#截取tuple
(2, 'a', 'b')
由于tuple的元素不可修改,因此tuple没有删除元素的方法。
8、Set集合
通过{}符号,将元素括起来的数据类型,元素之间以","逗号分隔,Set集合内的元素不能重复。
创建Set集合:
>>> set_a = set([1,2,3,'a','b','c'])
>>> print(set_a)
{'a', 1, 2, 3, 'c', 'b'}
>>> b = {1,2,'a','c'}
>>> print(b)
{'a', 1, 2, 'c'}
创建一个set有两种方式:
1、使用set()方法,这种方式必须提供一个list作为参数。
2、使用{}方式,如果是创建空的set集合,必须使用set(),{}这种方式是创建空的dict词典。
从上面的代码可以看到set中的元素时无序的。
set会自动过滤掉重复的元素:
>>> set_a = set([1,2,3,2,3,'a','b','c','b','a'])
>>> print(set_a)
{'a', 1, 2, 3, 'c', 'b'}
增加set集合元素:
>>> set_a.add(21)
>>> print(set_a)
{'a', 1, 2, 3, 'c', 'b', 21}
set集合通过add(key)方法添加元素,重复添加同一个元素不会报错,但是没有任何效果:
>>> set_a.add(21)
>>> print(set_a)
{'a', 1, 2, 3, 'c', 'b', 21}
>>> set_a.add(21)
>>> print(set_a)
{'a', 1, 2, 3, 'c', 'b', 21}
删除set集合元素:
>>> set_a.remove('c')
>>> print(set_a)
{'a', 1, 2, 3, 'b', 21}
在删除集合元素的时候务必要确保该元素的存在,如果删除一个不存在的元素,会报KeyError的错误:
>>> set_a = set([1,2])
>>> print(set_a)
{1, 2}
>>> set_a.remove(12)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 12
>>> set_a.remove(1)
set集合具备数学集合中的交、并、差集等集合运算:
>>> set_b = set([1,'d','e',4,5,'a'])
>>> set_a = set([1,2,3,'a','b','c'])
>>> print(set_a & set_b) #集合交集运算
{'a', 1}
>>> print(set_a | set_b) #集合并集运算
{'a', 1, 2, 3, 'c', 4, 5, 'd', 'b', 'e'}
>>> print(set_a - set_b) #集合差集运算
{'c', 2, 3, 'b'}
>>> print(set_a ^ set_b) #求两个集合不同时存在的元素
{'c', 2, 'e', 4, 5, 'd', 3, 'b'}
9、dict词典
key-value键值对,和java中的Map一样,使用{}将键值对扩起来,元素之间以“,”逗号分隔。
创建dict:
>>> dict_a = {1:'a',2:'b'}
>>> print(dict_a)
{1: 'a', 2: 'b'}
读取dict元素:
>>> print(dict_a.get(1))
a
>>> print(dict_a.get(3))
None
dict通过get(key)方法读取key对应的value值,如果value不存在,则显示None。
添加dict元素:
通过dict_name[key] = value给dict添加元素
>>> dict_a = {1:'a',2:'b'}
>>> dict_a['a'] = 123
>>> print(dict_a)
{1: 'a', 2: 'b', 'a': 123}
如果同一个key多次加入一个dict中,会覆盖掉前面的value值。
删除dict元素:
>>> dict_a.pop('a')
123
>>> print(dict_a)
{1: 'a', 2: 'b'}
>>> dict_a.pop('b')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'b'
通过使用pop(key)方法删除dict中的键值对,如果key不存在,则会报KeyError的错误。
遍历dict中的元素:
遍历key
>>> dict_a = {1:'a',2:'b','a':3,'b':4}
>>> for key in dict_a:
print(key)
1
2
a
b
>>> for key in dict_a.keys():
print(key)
1
2
a
b
上面两种遍历key的方式效果是等价的。
遍历value
>>> dict_a = {1:'a',2:'b','a':3,'b':4}
>>> for value in dict_a.values():
print(value)
a
b
3
4
同时遍历key和value
方法一:
>>> dict_a = {1:'a',2:'b','a':3,'b':4}
>>> for k,v in dict_a.items():
print(k,v)
1 a
2 b
a 3
b 4
方法二:
>>> dict_a = {1:'a',2:'b','a':3,'b':4}
>>> for kv in dict_a.items():
print(kv)
(1, 'a')
(2, 'b')
('a', 3)
('b', 4)
这种方式会将每个key-value键值对转换为一个tuple。
方法三:
>>> dict_a = {1:'a',2:'b','a':3,'b':4}
>>> for (key,value) in dict_a.items():
print(str(key) + ':' + str(value))
1:a
2:b
a:3
b:4
这种方式要保证key和value都是字符串类型。
作者:alunbar
出处:www.bigdata17.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。