基本数据类型操作
Posted surpass123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基本数据类型操作相关的知识,希望对你有一定的参考价值。
一、标准数据类型
在Python3x中,有6个标准数据类型,分别为数字(Number)、字符串(String)、列表(List)、元组(Tuple)、字典(Dictionary)和集合(Set)
不可变得数据类型:数字(Number)、字符串(String)、元组(Tuple)
可变数据类型:列表(List)、字典(Dictionary)、集合(set)
不可哈希的数据:列表(List)、字典(Dictionary)
- Python3x中支持int、 float、bool、complex(复数)
可以通过type()和isinstance()来判断数据类型:
(1)type()不会认为子类是一种父类类型
(2)isinstance()会认为子类是一种父类类型
>>> class A: pass >>> class B(A): pass >>> type(A()) == A True >>> isinstance(A(),A) True >>> type(B()) == A False >>> isinstance(B(),A) True >>>
- 整形(int)
可以通过isdigit()来判断字符串是否由数字组成
str = ‘99‘ if str.isdigit(): print(int(str))
- 字符串类型(string)
可以通过isalpha()来方判断字符串是否只由字母组成
可以通过isalnum()判断字符串是由数字和字母组成
字符串需要掌握的操作 1、strip lstrip rstrip 去两边的空格,去左边的空格,去右边的空格 2、lower upper 全转为小写,全转为大写 3、 startswith endswith 字符串以什么开头 字符串以什么结尾 4、split 将字符串按照分割符分成一个列表 >>> name=‘C:/a/b/c/d.txt‘ >>> print(name.split(‘/‘,1)) [‘C:‘, ‘a/b/c/d.txt‘] >>> 5、rsplit 从右边开始分割 >>> name=‘a|b|c‘ >>> print(name.rsplit(‘|‘,1)) [‘a|b‘, ‘c‘] >>> 6、join >>> tag=‘ ‘ >>> print(tag.join([‘egon‘,‘say‘,‘hello‘,‘world‘])) #可迭代对象必须都是字符串 egon say hello world >>> 7、replace >>> name=‘alex say :i have one tesla,my name is alex‘ >>> print(name.replace(‘alex‘,‘SB‘,1)) SB say :i have one tesla,my name is alex
- 浮点型(float)
可以通过float()将由纯数字组成的字符串转换为浮点型
- 元组(tuple)
元组可以看成是一个不可变的列表(可以当做字典的key),只读
name = (‘alex‘,‘egon‘,‘tank‘,‘surpass‘) 需要掌握的知识点: 1、按索引来取值(正向取,反向取) 2、切片(【1:3)开区间),步长 3、成员运算:in not in
元组练习题:
实现打印商品详细信息,用户输入商品名和购买个数,则将商品名,价格,购买个数加入购物列表,如果输入为空或其他非法输入则要求用户重新输入 msg_dic={ ‘apple‘:10, ‘tesla‘:100000, ‘mac‘:3000, ‘lenovo‘:30000, ‘chicken‘:10, }
- 列表(List)
user_info = [‘alex‘,‘male‘,18] 列表需要掌握的操作 1、按照索引去存取值(正向取+反向取):即可以存也可以取 2、切片操作(【1:3)),按步长 3、成员运算:in not in 4、追加 list.append() 5、删除 del list[index] 6、循环 7、列表推导式 list = [i for i in range(1,10) if i%2 == 0]
注意:空列表不能按照索引添加值,而应使用append()
- 字典(dictionary)
字典是通过key-value来存取值, key是不可变数据类型,且是唯一的
字典需要掌握的操作: 1、按照key存取值,可取可存 2、长度len 3、成员运算 in not in 4、删除 del dict[‘name‘] 5、keys(),values(),items() 6、循环 一个字典的实例: user_dict = {‘name‘:‘alex‘,‘age‘:18,‘sex‘:‘male‘} 字典删除: 1、del del user_dict[‘name‘] 2、pop user_dict.pop(‘name‘) 3、popitem 随机删除 user_dict.popitem() 字典取值: 1、user_dict[‘name‘] alex 2、user_dict.get(‘name‘) 推荐用get来取值,若键不存在不会抛异常,而会返回一个None clear():清除字典中的所有元素
直接引用、浅拷贝、深拷贝三者的区别:
这三者的区别:值传递、引用传递
直接引用是引用(地址)传递,修改旧的或者新的都会影响另外一个,牵一发而动全身。
使用列表的copy方法或者使用copy模块的copy()方法,仅仅开辟一块新的内存空间,将原列表的第一层元素复制一份新的,而列表内的嵌套不会复制,仅仅是引用了内层列表的地址,属于空有其表(因为内层的无论通过新列表还是旧列表都能修改)
使用deepcoopy()方法拷贝列表,不仅开辟新空间,而且还将原列表的所有的元素都复制一份,无论原列表内是否存在嵌套的列表,属于形神具备(因为内层的列表元素不再是通过引用,而是真真正正的复制了一份新的)
注意:对于数字和字符串,赋值、浅拷贝和深拷贝的值都指向同一个内存地址
通过fromkeys创建新的字典
Python 字典 fromkeys() 函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值 dict.fromkeys(seq[, value]) 首先创建一个用来存字典键的列表 lst = [‘name‘,‘age‘,‘sex‘] dict_obj = dict.fromkeys(lst,[]) >> dict_obj = {‘name‘:[],‘age‘:[],‘sex‘:[]} dict_obj[‘name‘].append(‘alex‘) >> dict_obj = {‘name‘:[‘alex‘],‘age‘:[‘alex‘],‘sex‘:[‘alex‘]} print("dict_obj[‘name‘]:{} dict_obj[‘age‘]:{} dict_obj[‘sex‘]:{}".format(id(dict_obj[‘name‘]),id(dict_obj[‘age‘]),id(dict_obj[‘sex‘]))) # dict_obj[‘name‘]:1714986428808 # dict_obj[‘age‘]:1714986428808 # dict_obj[‘sex‘]:1714986428808
python3字典的keys()方法会返回一个迭代器,可以用list()将其转换为列表
>>> dict_1 = {‘name‘:‘egon‘,‘age‘:18,‘sex‘:‘male‘} >>> dict_1.keys() dict_keys([‘name‘, ‘age‘, ‘sex‘]) >>> list_1 = list(dict_1.keys()) >>> print(list_1) [‘name‘, ‘age‘, ‘sex‘] >>>
Python3字典的setdefault()方法和get()方法相似,如果键不存在字典中,会添加键并将值设为 default
setdefault()方法语法: dict.setdefault(key, default=None) >>> dict_1 = {‘name‘:‘alex‘,‘age‘:18} >>> dict_1.setdefault(‘sex‘,‘male‘) ‘male‘ >>> print(dict_1) {‘name‘: ‘alex‘, ‘age‘: 18, ‘sex‘: ‘male‘} >>>
Python3中的update()方法把dict2的键值对更新到 dict中
>>> dict = {‘Name‘: ‘Zara‘, ‘Age‘: 7} >>> dict2 = {‘Sex‘: ‘female‘ } >>> dict.update(dict2) >>> print(dict) {‘Name‘: ‘Zara‘, ‘Age‘: 7, ‘Sex‘: ‘female‘} >>>
- 集合(set)
集合(set)是一个无序的不重复元素序列。 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。 集合需要掌握的操作: 1、长度len 2、成员运算 in not in 3、差集 - 4、合集 | 5、交集& 6、对称差集^ >>> s = set(‘asdfghj‘) >>> t = set(‘asghjklb‘) >>> s-t # 求差集(只有a中拥有的而b集合没有的元素) {‘d‘, ‘f‘} >>> s|t # 并集(既有集合a的元素,又有集合b的元素 ) {‘f‘, ‘d‘, ‘k‘, ‘b‘, ‘l‘, ‘g‘, ‘h‘, ‘j‘, ‘s‘, ‘a‘} >>> s&t # a和b的交集(集合a和b中都包含了的元素) {‘g‘, ‘h‘, ‘j‘, ‘s‘, ‘a‘} >>> s^t # 对称差集(不同时包含于a和b的元素) {‘f‘, ‘d‘, ‘k‘, ‘b‘, ‘l‘} >>>
集合推导式
集合推导式
>>> s = {obj for obj in ‘asccdfg‘ if obj not in ‘acf‘} >>> print(s) {‘g‘, ‘s‘, ‘d‘} >>>
以上是关于基本数据类型操作的主要内容,如果未能解决你的问题,请参考以下文章
片段“F1”不能在这里传播,因为“节点”类型的对象永远不能是“商店”类型