我是靠谱客的博主 朴实海燕,最近开发中收集的这篇文章主要介绍Python核心数据类型数据类型,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • 数据类型
    • number
      • 判断奇偶
      • number_进制
      • bool
      • range
    • 序列
      • 序列互转
      • 序列解包
      • 序列_字符串
        • 字符串方法
        • 屏蔽敏感词案例
      • 序列_列表
        • 列表方法
        • 列表推导式
      • 序列_元组
    • 映射类型_字典
      • 字典方法
      • 字典应用
    • 集合

数据类型

number

python中有几种数字类型,它们分别是

  • int(整数型)
  • float(浮点数型)
  • complex(复数型)
  • 还有布尔类型也算数字

    type() 这个内置函数可以查看值的类型

>>> type(1)
<class 'int'>
>>> type(1.1)
<class 'float'>
>>> type(1.1j)
<class 'complex'>

# 布尔就不写了 

其中复数型在平时开发的时候基本用不到,一般会在科学计算等场景可能会用到复数型

平时用的最多的还是int和float

以及
python3中移除了长整形long
原来长整形的部分并入了int类型

In[8]: 2**1000
Out[8]: 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376

In[9]: type(2**1000)
Out[9]: int

python中整型和浮点型进行运算,那么结果一定是浮点型

In[11]: 1-1.0
Out[11]: 0.0

需要注意的是 在python3中,
/是浮点除法
//是整型除法

>>> type(2/2)
<class 'float'>

>>> type(2//2)
<class 'int'>

在除法上2和3还是有一些区别的

int和float是可以互相转换的

In[17]: int(1.0)
Out[17]: 1

In[18]: float(int(1.0))
Out[18]: 1.0

判断奇偶

def jo(num):
    if num%2==0:
        print("偶数")
    else:
        print("奇数")

number_进制

Python中

  • 二进制以0b开头
  • 八进制以0o开头
  • 十六进制以0x开头
a = 0b1010
b = 0o12
c = 0xa
d = 10

print(a)
print(b)
print(c)
print(d)
# 最后会打印4个10

进制之间是可以通过int() hex() bin() oct() 来互相转换的
不过有一些区别

In[12]: type(int(0b10110))
Out[12]: int

In[13]: type(hex(0b10110))
Out[13]: str

In[14]: type(oct(0b10110))
Out[14]: str

In[14]: type(bin(0x10110))
Out[16]: str

int类型有一个方法 bit_length()

 |  bit_length(...)
 |      int.bit_length() -> int
 |
 |      Number of bits necessary to represent self in binary.
 |      >>> bin(37)
 |      '0b100101'
 |      >>> (37).bit_length()
 |      6

可以理解为数字转换成2进制后的位数
37转换成二进制后是0b100101 有6个数字
所有(37).bit_length() 的返回结果是6

这个方法要注意的是

In [35]: 37.bit_length()
  File "<ipython-input-35-e161a0e3ca9c>", line 1
    37.bit_length()
                ^
SyntaxError: invalid syntax


In [36]: (37).bit_length()
Out[36]: 6

In [38]: a = 11
In [39]: a.bit_length()
Out[39]: 4

bool

>>> type(True)
<class 'bool'>
>>> type(False)
<class 'bool'>

python中这两个单词是要首字母大写的

布尔类型和int/float互转

>>> int(True)
1
>>> float(True)
1.0
>>> int(False)
0
>>> float(False)
0.0

python中除了一些空值之外,其他非空类型转换为布尔值得到的值都是True

>>> bool('')
False
>>> bool(())
False
>>> bool({})
False
>>> bool([])
False
>>> bool(0)
False
>>> bool(None)
False

# 但是bool('0')是True

range

py3中

In [76]: range(10)
Out[76]: range(0, 10)

In [77]: type(_)
Out[77]: range

而在py27中

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> type(range(10))
<type 'list'>

range方法的前两个参数确定数字的范围,而第三个参数step确定步长
也就是每隔step-1拿一个数

>>> range(1,10,2)
[1, 3, 5, 7, 9]

py27中的xrange等价于py3的range

如果想倒着来的话 range(end,start,-1)

序列

序列可以通过索引来访问对应的元素

在python中有3种内置序列

  • 字符串
  • 列表
  • 元组

它们共同的特点
1. 可以使用成员操作符(in/not in)来判断元素是否在序列中
2. 通过索引获取一个元素
3. 通过切片获取一组元素
4. *一个数字 可以让数组中的元素重复n次
5. 同类型的序列可以通过+来进行拼接
6. 通过len()获取序列长度
7. 序列都是可迭代对象

还有比较重要的一点:索引如果超过范围就会报错
所以python没有办法用js这种在数组末尾追加元素的方法

// js中可用
arr[arr.length] = value

# python中用会报错
list[len(list)] = value
# 不过python可以这样
list[len(list):] = [value1,[value2,...]]


# 比如
In [13]: a = [1,2,3]
In [16]: a[len(a):] = [4]

In [17]: a[len(a):] = [5,6]

In [18]: a
Out[18]: [1, 2, 3, 4, 5, 6]

下面用一个字符串做演示一些序列的操作

a = "abcdefg"

print("a" in a)     # True

print(a[2])         # c

print(a[1:4])       # bcd
print(a[2:])        # cdefg
print(a[:-2])       # abcde
print(a[:])         # abcdefg
print(a[1:6:2])     # bdf
print(a[6:1:-1])    # gfedc

print(a*2)          # abcdefgabcdefg

print(a+a+a)        # abcdefgabcdefgabcdefg

print(len(a))       # 7

还有python支持负数索引 -1为最后一个元素

程序中一般涉及到范围的比如切片 比如range(1,11)
这种都是顾首不顾尾的

序列互转

序列是可以互相转的
不过list和tuple互转就是()和[]的变化
转成字符串的话 是将内容放到引号中

In [87]: a = 'abc'

In [88]: list(a)
Out[88]: ['a', 'b', 'c']

In [89]: tuple(a)
Out[89]: ('a', 'b', 'c')

In [90]: b = [1,2,3]

In [91]: str(b)
Out[91]: '[1, 2, 3]'

In [92]: eval(str(b))
Out[92]: [1, 2, 3]

不过使用eval() 可以将字符串中的内容执行

In [92]: eval(str(b))
Out[92]: [1, 2, 3]

# 或者
a = '{"a":1}'
print(type(eval(a)))        # <class 'dict'>

不过如果要变成’123’这样的就需要使用

#遍历数组,将数组中的内容转换成str(如果对象中有元素不是字符串的话)
In [94]: b
Out[94]: [1, 2, 3]
In [102]: c = ''

In [103]: for i in b:
     ...:     c+=str(i)
     ...:

In [104]: c
Out[104]: '123'

# 如果对象中的元素都是字符串 就可以使用 "".join(对象)
In [105]: b = ['1','2','3']

In [106]: c = ''.join(b)

In [107]: c
Out[107]: '123'


# 使用高阶函数reduce 
b = [1, 2, 3]
bn = reduce(lambda x, y: str(x) + str(y), b)
print(type(bn))     # <class 'str'>
print(bn)           # 123

序列解包

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

简单来说 *是解序列
**是解字典

两个值用,来连接可以看成是一个整体,这个整体是一个元组

序列_字符串

字符串是字符的序列
在python中单引号和双引号的工作机制相同,都是包括一串单行的字符
在python中三引号可以包括一段多行字符串(如果没有赋值给变量的,那么三引号字符串表示多行注释)

内置的字符串对象的值是不可变的

a = '123'
a[1]= '4'

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-aaeffe9cfb23> in <module>()
----> 1 a[1]='4'

TypeError: 'str' object does not support item assignment

字符串拼接不是修改,是新创建一个字符串对象,然后变量指向了新的对象

打印两个汉字 比如’理解’
py3中 len(s) 返回值是2 因为py3计算的是字符
py2中 len(s) 返回值是6[utf-8] 或者4[gbk] 因为py2计算的是字节
这点上从for循环遍历的结果上就能看出来

python的字符串格式化
- %s
- “{}”.format()

# %的方式
# '%s'%value
# '%s%s'%(value1,value2,value3)
# %s在传入的过程中会进行str(value)的操作 所以通过%s传什么都可以

a = "a%sb%sc" % (1, 1)
print(a)        # a1b1c

b = "a{0}b{1}c".format(1,1)
# 传*序列 或者元组的话 用索引获取
print(b)        # a1b1c

d = "a={a},b={b}".format(a=1, b=2)   
#传**字典或者键值对的话 用键获取

print(d)

当然,也可以使用字符串拼接(不过还是建议用format格式化)

c = "a" + "1" + "b" + "1" + "c"
print(c)    # a1b1c

转义符
原始字符串 r”字符串内容”

还有可能会用到的
这里写图片描述

字符串方法

"+".join(['1','2','3','4']) 将序列,集合中的所有元素添加到新的空字符串中,每个元素之间的分隔符为"+"
# In [68]: "+".join("abc")
# Out[68]: 'a+b+c'
# 如果join传的是字典的话,那么只添加key
# join方法要求传入的对象中元素必须都是字符串

 "1+2+3+4".split("+") 将字符串以+作为分割符分割成list
.splitlines() 以换行符作为分割符 分隔成list
.partition("aaa") 原字符串以aaa为中心 分隔成三份 返回一个元组
# "dddaaaddd".partition("aaa")
# ('ddd', 'aaa', 'ddd')
.rsplit
.rpartition
# split和rsplit如果不指定分隔符的话,默认以空白符号(空格 换行等)作为分隔符
# split和rsplit可以指定分隔次数,比如可以分成10份的情况下,第2个参数写2 就是分成3份  写1就是分成2份


.upper() 转换成大写 
.lower() 转换成小写
.capitalize() 一句话的首字母大写
.swapcase() 大->小 小->大
.title() 一句话每个单词的首字母大写(变成标题)

.count("a") 一个字符串在另一个字符串中出现的次数

.center(20,"#") 一共20个字符 原字符串的位置在中间,两边为#
.ljust(20,"#") 一共20个字符 原字符串的位置在左侧 右边为#
.rjust(20,"#") 一共20个字符 原字符串的位置在右侧 左边为#
.expandtabs(20) 将字符串中的abct替换成abc+17个空格
# In [45]: 'atbtc'.expandtabs(4)
# Out[45]: 'a   b   c'


.zfill(30) 指定字符串的长度为30 左侧补0


.endswith("-end") 如果以-end结尾返回True 
.startswith("start-") 如果以start-开头返回True 

.index("a") 字符第一次匹配的索引位置,可以继续传参数指定范围
# .index("a",4,10) 在字符串是索引4到索引9之间查找
.rindex() 从右边开始找
.find() 返回找到的第一个字符的索引
.rfind() 从右开始找
# find和rfind没有找到的话返回-1
# index没有找到会抛异常ValueError


.format() 格式化输出
{0}{1}{2} 对应(第一项,第二项,第三项)
{name1}{name2}{name3} 对应{name1=x,name2=y,name3=z}
.format(**dict) 这个用到的解包
.format_map(dict)   #dict是一个字典

.isdight() 是否只有整型数字
.isdecimal() 是否只有十进制整数
.isalnum() 是否只有字母或数字
.isalpha() 是否只有字母
.islower() 是否只有小写
.isupper() 是否只有大写
.istitle() 是否每个单词的首字母大写
.isspace() 是否都是空格
.isidentifier() 是否合法标识符 
# 'def'.isidentifier() 的返回值也是True

.isnumeric() 这个方法也能判断数字,不过这个方法还可以判断汉字和罗马数字
# In [64]: '一'.isnumeric()
# Out[64]: True
#
# In [65]: '壹'.isnumeric()
# Out[65]: True
.isprintable() 是否不存在不可显示的字符
# In [66]: 'abc'.isprintable()
# Out[66]: True
# 
# In [67]: 'abct'.isprintable()
# Out[67]: False

.strip() 默认去掉字符串两端的空白字符,也可以传参数去掉指定的内容
.lstrip() 去掉左边的
.rstrip() 去掉右边的
# 但是主要的作用还是去空格

.replace() 替换
# "xxabcxxertxxcde".replace("xx","pz",1)
# 'pzabcxxertxxcde' 只替换了一次
# "xxabcxxertxxcde".replace("xx","pz")
# 'pzabcpzertpzcde' 全部替换

table = ''.maketrans('abc','123')
s = 'abcdef'
print(s.translate(table))       #'123def'
# 字符串的maketrans方法的返回值会生成一个字符映射表  
# 使用字符串s 调用translate方法 传入table作为参数
# 可以将s字符串中所有的a替换成1 b替换成2 c替换成3

相对来说最重要的
- join
- upper / lower
- find
- strip
- split

屏蔽敏感词案例

# 敏感词

a = ['aaa','bbb','ccc']
s = 'dsajd;1p2k1p,l21aaad1pl12,;nnbbbe21klm12l;meccce1mp;ldf1'

for w in a:
    if w in s:
        s = s.replace(w,'***')


print(s)

序列_列表

列表可以存一组数据,这句数据的数据类型可以不相同
数据类型可以的值,也可以是对象,函数名

不过通常来说都是存相同数据类型的值

创建一个空列表 a = []
创建一个列表 num = [1,2,3]

列表是可以嵌套(因为列表也是对象)

列表方法

增

    .append(obj) 将一个元素插到末尾
    .insert(index,obj) 插到指定位置
    .extend(seq) 一次性插入多个值 
        比如extend([5,6,7]) 往原有列表中传入5,6,7
        extend([8,[9],[10,11]) 往原有列表中传入8,[9], [10, 11]

    list[len(arr):] = [value1,...]  也是在末尾追加
    list1+list2 等价于list1.extend(list2)


删
    .remove(obj) 删除指定元素,这里不能直接用索引 可以remove(list[index])
    .pop() 默认删除最后一个元素 并返回该元素 
    .pop(index) 删除指定索引位置上的元素 并返回该元素
    .clear() 清空列表
    del list[索引/切片] 或者直接del list


改
    list[索引]=value
    list[切片]=list2/tuple2


查
    list[index]
    value in list[index]
    value not in list[index] 
    .count(obj) 统计元素出现次数
    .index(obj) 从列表中找出某个值第一个匹配项的索引位置


.reverse() 反转列表
.sort() 排序 按照ascii码排序
.sort(reverse=True)
# def sort(self, key=None, reverse=False)
.copy() 列表浅拷贝

列表推导式

格式

>>> [i for i in range(1,11)]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for循环的前面是一个和i有关的表达式,可以配合一个三元运算符

>>> [i**2 if i>3 else i**3 for i in range(1,11)]
[1, 8, 27, 16, 25, 36, 49, 64, 81, 100]

for循环的后面可以跟一个条件判断,比如不想出现7

>>> [i for i in range(1,11) if i!=7 ]
[1, 2, 3, 4, 5, 6, 8, 9, 10]

序列_元组

元组可以看成是一个不可修改的list
元组可以调用两个不带下划线的方法 index/count
但是元组中如果有list或者dict的话,是可以进行修改的(但是一级元素的内存地址不变)

定义一个元组 至少需要一个元素和一个,
否则

>>> type(('abc'))
<class 'str'>
>>> type(1)
<class 'int'>


>>> type(('abc',))
<class 'tuple'>
>>> type((1,))
<class 'tuple'>

在python中如果出现了

变量1,变量2

这种情况,就可以将他们看成是一个元组

(变量1,变量2)

例如 如果函数返回了多个值,那么返回值的类型就是元组

元组还可以进行一些操作

a,b = b,a

c,d = (1,2)
print(c)    # 1
print(d)    # 2

映射类型_字典

字典中存放一些键值对

{key:value}
字典是无序的
key必须是不可修改类型(可hash类型 比如字符串 数字 元组)

字典中的key是不能重复的
如果key是布尔值的话,可能会和数字0/1冲突,key对应的value会进行覆盖

dic = {

    True: 2,
    3: 3,
    1: 1
}

print(dic)

# 打印输出
# {True: 1, 3: 3}

字典方法

取值
    dict[key]
    dict.get(key)   
        这两个是返回key对应的value 找不存在的key不会报错
        dict.get(key,0) get使用get方法获取值可以设置默认的value值
    dict.setdefault(key,value)  
        如果key存在不进行操作 返回key对应的value
        如果key不存在,添加一个key:value 返回key对应的value

查
    dict.keys()
    dict.values()
    dict.items()
        分别返回(py3中 2中是列表)
            dict_keys([key1,key2,...])
            dict_values([value1,value2,...])
            dict_items([(key1,value1),(key2,value2),...])

增
    dict[key]=value
    dict.get(key)=value
    dict.update(dict2)
        将dict2加入到dict,如果有相同的key 后面更新的覆盖原有的
        update(k1=v1,k2=v2,...)  还支持这样的写法

删
    dict.clear() 清空字典
    del dict(key)
    del dict
    dict.pop(key) 删除指定的键值对,并返回该键值对的value
        pop方法可以设置默认值 当删除失败的情况下返回默认值
    dict.popitem() 随机删除一个键值对,并以元组的方式返回键值对(key,value)

其他操作
    dict.fromkeys([key1,key2,key3,...],value)
        返回一个字典{key1:value,key2:value,key3:value}

嵌套
    {
        {},
        {},
        {}
    }

字典遍历
    for i in dict:
        print(i,dict[i])

    for k,v in dict.items():
        print(k,v)

    for key in dict.keys():
    print(key)     #只遍历key

    for value in dict.values():
        print(value)    # 只遍历value

字典中最常用的
- keys/values/items()
- get()
- update()

字典应用

1 检查一个字符串中有多少的数字 多少字母

a = 'dj10i3kltm1qf0j2`091rjmqf120jfoklm34yg3mlgemf;'
dic = {}
for i in a:
    if i.isdigit():
        dic['num'] = dic.get('num', 0) + 1
    if i.isalpha():
        dic['alpha'] = dic.get('alpha', 0) + 1

print(dic)

# 输出结果
# {'alpha': 29, 'num': 15}

2 仿switch

'''
i = 1
switch(i){
    case 1:
        console.log(1);
        break;
    case 2:
        console.log(2);
        break
    case 3:
        console.log(3):
        break;
}

'''

switcher = {
    '1': lambda: print(1),
    '2': lambda: print(2),
    '3': lambda: print(3),
}
i = 1
switcher[i]()

集合

python的集合是一种无序,且不重复的数据容器

这里写图片描述

转成集合就相当于for循环遍历对象,然后判断遍历出来的元素是否重复
然后在将元素放到集合中

集合的一些方法

add 添加元素 只能传一个
clear 清空
copy 浅拷贝
pop()  随机删除并返回一个元素
remove(obj) 指定要删除的元素 不存在的话会报错
discard(obj) 删除元素不存在的话不会报错
update() 更新集合 可以传多个值

这里说明一下 如果是简单的去重,不考虑顺序问题的话
可以使用集合

& 交集
| 并集
-右 差集 左边有右边没有的
左^右 对称差集(并集-交集)

这里写图片描述

这里写图片描述

这里写图片描述

set是可变集合
frozenset是不可变的集合

最后

以上就是朴实海燕为你收集整理的Python核心数据类型数据类型的全部内容,希望文章能够帮你解决Python核心数据类型数据类型所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部