码迷,mamicode.com
首页 > 其他好文 > 详细

基础数据类型 二

时间:2019-06-11 22:07:14      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:get   变量   不能   因此   嵌套   列表   abc   元祖   常用操作   

列表 list

list [ ] 多个元素,每个元素用逗号隔开

1.定义形式

#定义方式一  常用方式
list_1 = [1,2,'a','b','c',"asdasawsd",汉字,[12,'now',端午]]    #[a]也是列表
#定义方式二 
list_2 = list("ab13")
print(list_2)        #底层使用的for循环    "ab13"为可迭代字符串类型  
# 得到列表['a','b',1,3] 

2.特点

可存储大量数据,字符串自能存储少量数据,列表中存储类型是多样的,任意数据类型都可存放.

有序 即可以索引和切片

可变的 对列表的操作可改变原列表,而字符串不可变

3 列表的索引 切片

列表内以逗号为区分为每一个元素,从左至右索引为0,1,2,3....,从右至左索引为-1,-2,-3,-4....

切片

L1 = [1,2,3,'a','b','edx']
print(L1[1:5:2])  #列表切片后还是列表,[1:5:2]第一个数位置为起始索引位置,第二个为终止索引位置,第三个为间隔
# 得到结果 [2, 'a']

4 列表的增删改

1.append 追加 添加在末尾

L1 = [1,2,3,'a','b']
L1.append('c')   #注意这里对L1的操作不会有返回值,只是改变的L1  因此直接print(L1.append('c'))是空值
print(L1)

2.insert(,) 插入 括号前半部分为要插入位置的索引号 后边为插入内容

L1 = [1,2,3,'a','b']
L1.insert(2,'A')    # 效率较低   插入索引为记号,插入的内容就位于记号索引位
print(L1)

3.extend 扩展 迭代添加 可迭代对象都可加入

L1 = [1,2,3,'a','b']
L1.extend('cde')      #迭代添加本质添加了如下过程:   for i in 'cde'
print(L1)             #                             L1.append(i)
#结果  [1, 2, 3, 'a', 'b', 'c', 'd', 'e']

4.列表合并

L2 = [1,2,3]
L3 = ["a","b","c"]
L4 = L2+L3
print(L4)

1.pop() 弹出 默认删除最后一个也可指定索引位 有返回值 返回被删除内容(对列表的操作唯一有返回值的)

li = [1,2,3,"abc",True]   
print(li.pop(3))   # 输出 abc   返回值
print(li)          # 输出  [1, 2, 3, True]  操作后li结果

2.clear 清空

li = [1,2,3,"abc",True] 
li.clear()
print(li)

3.remove 按元素名删除

li = [1,2,3,"abc",True] 
li.remove(2)
print(li)   >>>  [1, 3, 'abc', True]  #按元素名从左到右删一个

4.del

 li = [1,2,3,"abc",True] 
 del li      #删除整个列表
 del li[2]   #删除指定元素 按索引
 del li[1:3] #删除区间
 del li[1:5:2]  #删除间隔的内容

1.通过索引改

li = [1,2,3,"abc",True] 
li[-1] = 'fg'  # 换什么就是什么且位于输入的索引号位置

2.通过切片改

li = [1,2,3,"abc",True] 
li[1:3] = "qwo" ==>>  #迭代  输出 [1, 'q', 'w', 'o', 'abc', True]
li[1:3] = "1"           #  [1, '1', 'abc', True]        
li[1:3] = []               # 切片的时候可以多,可以少,可以指定空值

3.通过间隔切片改

li = [1,2,3,"abc",True]    #去几个放几个
li[1:4:2] = '今天'   ==>>  #  迭代 
li[1:4:2] = 1,21     #可以自己指定,元素之间由逗号隔开

索引,切片,for循环

a,b = [1,23],[3,45]
print(a,b)  ==>>>[1, 23] [3, 45]

列表的嵌套
li = [1,2,3,"abc",True,[5,6,['ss'],7]] 
print(li[5][2][0])   #嵌套下的查找"ss"

元组 tuple

    2.1 定义 ()内每个元素都已逗号隔开      tuple  
 tu = (1,2,34) # 元组类型

 tu = ()       #元组类型

 tu = (1)      #括号中元素本身类型   

 tu = (1,)     #元组类型

特点

元组有序 可索引 可切片

元组不可改变数据类型,元组只能查看不能修改

可存储任意数据类型,一般存储一些不修改的数据,用于配置文件,防误修改等

查看

for循环也可查询

index 通过元素找索引,找到第一个符合值就返回结果,没有就报错.

tu = ('太白', [1, 2, 3, ], 'WuSir', '女神')
print(tu.index('太白'))  #  0 

字典

列表的缺点:

1.列表可存储大量数据类型,但数据量大后查询慢

2.列表只能按顺序存储,数据之间关联性不强

为解决这些缺点,引入字典(dict)数据类型

不可变(可哈希)的数据类型:int,str,bool,tuple。

可变(不可哈希)的数据类型:list,dict,set。

字典是python中的映射类型,它以{}括起来,里边的内容以键值对形式存储.{"key":"value"} 即{"键":"值"}

key(键):不可变(可哈希)的数据类型.并且是唯一的,不重复的

value(值): 任意数据

字典特点:

无序的(在python3.5及之前版本,字典是无序的,随机显示.在3.6版本之后.字典会按初建字典时的顺序排列.

查询速度快,内存消耗大.

存储大量数据

能将数据关联

字典创建方式:

dic = dict((('one', 1),('two', 2),('three', 3)))
dic = dict([('one', 1),('two', 2),('three', 3)])
print(dic)  # {'one': 1, 'two': 2, 'three': 3}
dic = dict(one=1,two=2,three=3)
print(dic) # {'one': 1, 'two': 2, 'three': 3}
dic = dict({'one':1,'two':2,'three':3})
print(dic)  #{'one':1,'two':2,'three':3}

字典的常用操作

1.通过键值直接增加 dic["键"] = "值"

dic = {'name': '太白', 'age': 18}
dic['weight'] = 108  #没有weight这个键,就增加键值 如有键则改值
print(dic)  #{'name': '太白', 'age': 18, 'weight': 108}

2.setdefault(‘键‘,值)

dic = {'name': '太白', 'age': 18}
dic.setdefault('height',175)  #没有键则添加,**有键则不变**
print(dic)  # {'name': '太白', 'age': 18, 'height': 175}
#它有返回值
dic = {'name': '太白', 'age': 18}
ret = dic.setdefault('weight',108)
print(ret)         # 108

1.pop 通过key删除字典的键值对,有返回值,可设置返回值

dic = {'name': '太白', 'age': 18}
ret = dic.pop('name')
print(ret,dic)  #太白 {'age':18}
ret = dic.pop('n',None)  # None  为找不到键时的返回值
print(ret,dic)   #None {'name': '太白', 'age': 18}  

2.del

dic = {'name': '太白', 'age': 18}
del dic  #删除整个字典
del dic['name'] #删除指定键值对

3.clear 清空字典

dic = {'name': '太白', 'age': 18}
dic.clear()
print(dic)   # {}

4.popitem 3.5版本及之前,popitem为随机删除,3.6及之后为删除最后一个,有返回值

dic = {'name': '太白', 'age': 18}
ret = dic.popitem()
print(ret,dic)  #('age', 18) {'name': '太白'}

1.通过键值改

dic = {'name': '太白', 'age': 18}
dic['name'] = '大木'
print(dic)    # {'name': '大木', 'age': 18}

2.update() (update括号里的字典级别高,会覆盖同键的)

dic = {'name': '太白', 'age': 18}
dic.update({'name':'大木','weight':108})
# dic.update(name='大木',weight=108)  **注意此时的key不叫''
# dic.update([('name','大木'),('weight',108)])
print(dic)   #  {'name': '大木', 'age': 18, 'weight': 108}

字典的查询只能通过键获取值,不能通过值获取键

1.通过键查看和通过get查看

dic = {1:2,"a":"a1"}
print(dic[1])  # 如果有键在就返回键对应的值,弱国不在就报错
print(dic.get(1,'没有此键')) #有键返回对应键值,没有返回指定内容,不会报错

2.dic.setdefault(‘键‘) 也是通过键查看

其他

dic = {1:2,"a":"a1"}
for i in dic:     # for循环字典的时候打印的时字典的键 
    print(i,dic[i],end=' ') # 1 2 a a1 
dic = {1:2,"a":"a1",3:4,5:6}
key_list = dic.keys()
print(key_list)    #dict_keys([1, 'a', 3, 5])  一个高仿列表,存放的都是字典的key(键).它无序但可fo循环打印
print(list(key_list))   # 这个高仿列表可转换为列表 
dic = {1:2,"a":"a1",3:4,5:6}
values_list = dic.values() #dict_values([2, 'a1', 4, 6]) 一个高仿列表,存放的都是字典的value(值).它无序但可fo循环打印
print(values_list)
print(list(values_list)) #可转换为列表
dic = {1:2,"a":"a1",3:4,5:6}
key_volues_list = dic.items()
print(key_volues_list) # dict_items([(1, 2), ('a', 'a1'), (3, 4), (5, 6)])  
# 一个高仿列表,存放是多个元祖,元祖中第一个是字典中的键,第二个是字典中的值  无序可for循环打印
print(list(key_volues_list))  #并且这个高仿的列表可以转化成列表

分别赋值 拆包

a,b = 1,2
print(a,b)   #1 2
a,b = ('你好','世界')  # 这个用专业名词就叫做元组的拆包
print(a,b)   #你好 世界
a,b = ['你好','大飞哥']
print(a,b)   #  你好 大飞哥
a,b = {'汪峰':'北京北京','王菲':'天后'}
print(a,b)  # 汪峰 王菲
dic = {"1":1,"2":2,"3":3,"4":4}
for k,v in dic.items():
     print(k,v)    # 结果  1 1 2 2 3 3 4 4 

解构

a = 1 
b = 2 
print("is a",id(a)) #  显示a在内存中的id
print("is b",id(b)) #  显示b在内存中的id
a,b = b,a
print("is a",id(a)) #  显示a在内存中的id    
print("is b",id(b)) #  显示b在内存中的id  
print(a,b)      # 结果 2 1    通过观察变量id的变换可知转换本质时交换了内存地址的指向
a,_,c = '你好啊'
print(a,c)  # 你 啊   

字典嵌套

dic = {
    'name':'汪峰',
    'age':48,
    'wife':[{'name':'国际章','age':38}],
    'children':{'girl_first':'小苹果','girl_second':'小怡','girl_three':'顶顶'}
}
name = dic['name']
print(name)   #1. 获取汪峰的名字。
di = dic['wife'][0]['name']
print(di)    #3. 获取汪峰妻子的名字。
name = dic['children']['girl_three']
print(name)  #获取第三个孩子的名字.

enumerate:

枚举,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。

li = ['name','李白','age',18,'sex','man']
for i in enumerate(li):
    print(i)
for index,name in enumerate(li,1):
    print(index,name)
for index, name in enumerate(li, 100):  # 起始位置默认是0,可更改
    print(index, name)  

集合

set

集合特点:集合中的元素可哈希(不可变)且不重复的

? 集合本身时不可哈希的(可变),集合是无序的

?

集合常用于去重复,如把一个列表变为集合就自动去重了

li = [1,2,3,4,2,11,3,5,6,3,4,8,3,2,1,5,6]
l2 = list(set(li))    
print(l2)       #  [1, 2, 3, 4, 5, 6, 8, 11]
 

集合的操作

update 迭代添加

s = {1,2,3,"123",False,(1,2,3,4)}
s.update('123')
print(s)   #{False, 1, 2, 3, (1, 2, 3, 4), '123', '2', '3', '1'}

add

s = {1,2,3,"123",False,(1,2,3,4)}
s.add("abc")
print(s)   #{False, 1, 2, 3, (1, 2, 3, 4), '123', 'abc'}

remove 指定元素删除

s = {1,2,3,"123",False,(1,2,3,4)}
s.remove('123')
print(s)   #  {False, 1, 2, 3, (1, 2, 3, 4)}

pop 随机删除一个

s = {1,2,3,"123",False,(1,2,3,4)}
s.pop()
print(s)

clear 清空

s = {1,2,3,"123",False,(1,2,3,4)}
s.clear()
print(s)   #set()

del 删除集合

s = {1,2,3,"123",False,(1,2,3,4)}
del s       #  直接删除集合

其他操作

交集。(& 或者 intersection)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 & set2)  # {4, 5}
print(set1.intersection(set2))  # {4, 5}

并集。(| 或者 union)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 | set2)  # {1, 2, 3, 4, 5, 6, 7,8}

print(set2.union(set1))  # {1, 2, 3, 4, 5, 6, 7,8}

差集。(- 或者 difference)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 - set2)  # {1, 2, 3}
print(set1.difference(set2))  # {1, 2, 3}

反交集。 (^ 或者 symmetric_difference)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 ^ set2)  # {1, 2, 3, 6, 7, 8}
print(set1.symmetric_difference(set2))  # {1, 2, 3, 6, 7, 8}

子集与超集

set1 = {1,2,3}
set2 = {1,2,3,4,5,6}

print(set1 < set2)
print(set1.issubset(set2))  # 这两个相同,都是说明set1是set2子集。

print(set2 > set1)
print(set2.issuperset(set1))  # 这两个相同,都是说明set2是set1超集。

frozenset不可变集合,让集合变成不可变类型。

s = frozenset('barry')
print(s,type(s))  # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>

基础数据类型 二

标签:get   变量   不能   因此   嵌套   列表   abc   元祖   常用操作   

原文地址:https://www.cnblogs.com/banshannongchang/p/11006376.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!