第三章 数据类型

3.1 int

# None 无操作
# bytes 类
# 只有str 可以强转
s = '99'
print(type(int(s)))

3.2 bool

# bool 布尔,主要用于条件判断。 
# None, 0 , '', [], {}, set() 
# 以上都是False

3.3 str " "

1. 常用操作

str操作常用的 14 (9+5) 种
1.upper/lower 2.isdigit/isdecimal 3.strip 4.replace 5.split 6.startswith/endswith 7.encode 8.format 9.join

1. s.upper() / s.lower()

# 大小写转换
s = 'Henry'
print(s.upper(), s.lower())

2. s.isdigit() / s.isdecimal()

# 判断是否是数字
s1 = '123'
s2 = '12.3'
print(s1.isdigit(), s2.isdigit())		# True Flase

# isdecimal只判断是否是整数

3. s.strip()

# 默认去除两边空格+ 
 + 	

s = '  asdfgh,      '
print('-->', s.strip(), '<--')
print('-->', s.strip().strip(','), '<--')

4. s.replace('a', 'b', n)

# repalce 中的 a 和 b 必须是str类型, n 必须是int类型
s = 'adsafga'
print(s.replace('a', '666'))
print(s.replace('a', '666', 1))

5. s.split('_')

# str的分割
s = 'henry_echo_elaine_'
li = s.split('_')
print(li)  # 分割后的元素永远比分隔符号多一个

6. s.startswith() / s.endswith()

# 判断开始/结束位置是否是指定元素
s = 'abghjkdc'
print(s.startswith('ab'), s.endswith('cd'))
# True  Flase

7. str 的格式化输出(2种)

# 如果使用格式化输入,打印%需要使用 %%
# %s,%d  :表示占位符

# way1 通常用于函数
"***{0}***{1}**".format(a, b)
# % (a, )  :这里表示tuple,建议加逗号 

# way2 
"***%s, ***%s***" % (a, b,)   
# 示例
# way1 '{0} ***{1}'.format(a, b)
a = 'abcd'
b = '666'
s = '{0} ***{1}'.format(a, b)
print(s)
# way2 
s1 = '%s***%s' % (a, b,)
print(s1)

扩展使用示例:

# %s ,只能是tuple
msg = '我是%s, 年龄%s' % ('alex', 19)
msg = '我是%(name)s, 年龄%(age)s' % {'name': 'alex', 'age': 19}
# format格式化
v1 = '我是{name}, 年龄{age}'.format(name = 'alex', age = 18)
v1 = '我是{name}, 年龄{age}'.format(** {'name': 'alex', 'age': 19})
v2 = '我是{0}, 年龄{1}'.format('alex', 18) 
v2 = '我是{0}, 年龄{1}'.format(*('alex', 18) )

8. encode

# 指定编码类型
s = '你好'
print(s.encode('utf-8'))   # 6个字节
print( s.encode('gbk'))		 # 4个字节

9. '_'.join(s)

# 用于循环加入指定字符
# s 必须是iterable
# s 可是str,list,tuple,dict,set(str + 容器类)
# s 中元素值必须是str类型
'_'.join(s)
# 示例
# 指定元素循环连接str中的元素
s = 'henry'
print('_'.join(s))    # 下划线连接个字符

2. 其他操作

  1. s.find('a') / s.rfind()
    • 返回第一个 a 的索引值,没有则返回 -1
  2. s.index('a') / s.rindex() /s.lindex()
    • 返回第一个 a 的索引值,没有报错
  3. s.isupper() / s.islower()
  4. s.capitalize()
  5. s.casefold()
  6. s.center(20, "*")
    • 可以为空
  7. s.ljust(20, "*")/s.rjust()
  8. s.zfill()
    • 用0填充
  9. s.count('a', [start], [end])
    • 查找'a' 的个数
  10. s.isalnum()
  11. s.isalpha()
  12. s.isnumeric()
  13. s.isprintable()
  14. s.istitle()
  15. s.partition('a') / s.rpartition()
    • 分成三部分,a左边,a右边
  16. s.swapcase()


3. 公共方法

1. len(s)

# 返回s长度
s = '1234567890'
print(len(s))     # 10

2. s[index]

# 索引取值
s = '123456789'
print(s[3])   # 4

3. 切片

s = '123456789'
print(s[3:5])   # 45

4. setp

# 根据step进行切片
s = '123456789'
print(s[3::2])   # 468

5. for循环

s = '123456789'
for i in s:
    print(i)

3.4 list []

1. 常用操作

list操作目前一共有15(8+7)种, 1.append 2.insert 3.remove 4.pop 5.clear 6.reverse 7.sort 8.extend

1. li.append('666')

# 任意类型数据,li操作不能直接放在print()中
li = [1, 2, 3, 4, 5, 6]
li.append('666')
print(li)
li.append(['henry'])
print(li)

2. li.insert(2, 'henry')

# 按照index位置插入指定内容
li = [1, 2, 3, 4, 5, 6]
li.insert(3, 'henry')
print(li)

3. li.remove('aa')

# 删除指定list中的元素
li = ['aa', 'a', 'aacde']
li.remove('aa')
print(li)
li.remove('bb')
print(li)  # 会报错

4. li.pop(index)

# 按index删除list中的元素
li = [1, 2, 3, 4, 5, 6]
li.pop()
print(li)
li.pop(3)
print(li)

5. li.clear()

# 清空list中的所有元素
li = [1, 2, 3, 4, 5, 6]
li.clear()
print(li)

6. li.reverse()

# 反转list中的元素
li = [1, 2, 3, 4, 5, 6]
li.reverse()
print(li)

7. li.sort(reveres = True)

# reverse = True 从大到小
# 只能是同一类型的元素
# dict,tuple不支持排序
li = [6, 2, 3, 1, 5, 4]
li.sort()
print(li)
li = ['ba', 'ab', 'c', 'd']
li.sort(reverse=True)
print(li)

li = [[6], [2, 3], [1, 5, 4]]
li.sort()
print(li)

li = [(6, 2, 3, 1, 5, 4)]
li.sort()
print(li)

8. li.extend(s)

# 把s中的元素,循环取出,逐个追加到list中
# s可以是str, list, tuple, dict, set
# dict只取keys 追加到list中
s = 'henry'
li = [1, 2, 3, 4, 5, 6]
li.extend(s)
print(li)
s = ['a', 'b', 'c', 'd']
li.extend(s)
print(li)

2. 其他

  1. li.count('a')
  2. li.copy()
    • 浅拷贝
  3. li.count()
    • 只计算第一层,不考虑嵌套
  4. li.index('val')


3. 公共方法

1. len(s)

li = [1, 2, 3, 4, 5, 6]
print(len(li))

2. index 取值

li = [1, 2, 3, 4, 5, 6]
print(li[2])

3. 切片

li = [1, 2, 3, 4, 5, 6]
print(li[2:5])

4. step

li = [1, 2, 3, 4, 5, 6]
print(li[2::2])

5. for循环

li = [1, 2, 3, 4, 5, 6]
for i in li:
  print(i)

6. 修改

# 使用index修改,如果只是一个值,则正常修改
li = [1, 2, 3, 4, 5, 6]
li[2] = 'henry'
print(li)
# 使用index修改,如果是多个值,认为是一个tuple
li[2] = 'a', 'b', 'c'
print(li)
# 使用切片[]修改,则循环取值加入
li[2:3] = 'a', 'b', 'c'
print(li)

7. 删除del li[]

# del 也不能放在print()里面
li = [1, 2, 3, 4, 5, 6]
del li[2]
print(li)
del li[2:]
print(li

3.5 tuple ()

# 没有独有操作,目前只有5种
# tuple里,最后一个值最好加一个 逗号 ,以区别于运算符

1. 常用操作

1. len()

t = (1, 2, 3,)
print(len(t))

2. index

t = (1, 2, 3,)
print(t[2])

3. 切片

t = (1, 2, 3,)
print(t[1:])

4. step

t = (1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
print(t[1::2])

5. for 循环

t = (1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
for i int t:
  print(i)

2. 内置函数

  • max(tup). # 返回最大值
  • min(tup). # 返回最小值
  • tuple(li). # list 转tuple

3.6 dict {}

1. 常用操作

dict 目前一共有 14(9 + 5) 种操作, 1.keys 2.values 3.items 4.get 5.pop 6.update 7.setdefault 8.popitem 9.clear
# {key1: value1, k2:value2}
# key不能重复

1. info/ info.keys()

  • 类似 list ,但不是list,例如:dict_keys(['name', 'age', 'gender'])
# 取所有key
info = {1: 'henry', 2: 'echo', 3: 'eliane'}
for key i info:
  print(key)

2. Info.values()

# 取所有value
info = {1: 'henry', 2: 'echo', 3: 'eliane'}
for v in info.values():
    print(v)

3. info.items()

# 取所有key值对
# 取出的是 tuple 类型
info = {1: 'henry', 2: 'echo', 3: 'eliane'}
for pair in info.items():
    print(pair)

4. Info.get(key, 666)

# 有key则取出, 没有则返回指定 值
# 如果没有指定值,则返回 None
info = {1: 'henry', 2: 'echo', 3: 'eliane'}
print(info.get(1, 666))
print(info.get(4, 666))

5. info.pop(key)

info = {1: 'henry', 2: 'echo', 3: 'eliane'}
print(info.pop(1))
print(info.pop(4))

6. info.update(info1)

# 只能用dict类型更新
info = {}
info1 = {1: 'henry', 2: 'echo', 3: 'eliane'}
info.update(info1)
print(info)

7. info.setdefalut(key, value)

# 查询key,有则取出,没有则添加
info = {1: 'henry', 2: 'echo', 3: 'eliane'}
info.setdefault(4, 'hello')
print(info)
# 取出需要赋值给其他变量
val = info.setdefault(4, 'i hate you')
print(val)

8. info.popitem()

# 不能加参数,删除最后一个key值对
info = {1: 'henry', 2: 'echo', 3: 'eliane'}
v = info.popitem()
print(v,info)   # v是tuple

9. info.clear()

# 清空所有元素
info = {1: 'henry', 2: 'echo', 3: 'eliane'}
info.clear()
print(info)

2. 其他

  1. info.copy() # 浅拷贝
  2. info.fromkeys()
li = [1, 2, 3, 4, 5]
info = {'a': 1, 'b': 2}
v = info.fromkeys(li, 'hello')
print(v, info)


3. 公共方法

1. len(info)

info = {1: 'henry', 2: 'echo', 3: 'eliane'}
print(len(info))

2. Index 取值

info = {1: 'henry', 2: 'echo', 3: 'eliane'}
print(info[1])

3. for 循环

info = {1: 'henry', 2: 'echo', 3: 'eliane'}
for i in info:
  print(i)
for v in info.values():
  print(v)
for pair in info.items():
  print(pair)

4. 修改

# key一样则修改,不一样则追加
info = {1: 'henry', 2: 'echo', 3: 'eliane'}
info[1] = 'hello'
print(info)
info[4] = 'you are smart'
print(info)

5. 删除

info = {1: 'henry', 2: 'echo', 3: 'eliane'}
del info[1]
print(info)

4. 有序字典

# __getitem__ set, del 
from collections import OrderdDict

info = OrderedDict()
info['k1'] = 123
info['k2'] = 456

3.7 set() /{}

1. 常用操作

set 目前一共有11(10 + 2)种操作,空集合用set()表示。 
1.add 2.update 3.pop 4.discard 5.remove 6. clear 7.intersection 8.union 9.difference 10.symmetric_difference
# 无序,不重复

1. s.add('a')

s = {1, 'henry', 2, 'echo', 3, 'eliane'}
s.add(5)
print(s)

2. s.update(s1)

# 可以用str, list, tuple, dict, set, 也可以混合多种类型放入update中
s = {1, 'henry', 2, 'echo', 3, 'eliane'}
s1 = {5, 6, 7, 8, 1, 2, 3}
s2 = [5, 6, 7, 8, 1, 2, 3]
s3 = (5, 6, 7, 8, 1, 2, 3)
s4 = {5: 6, 7: 8, 1: 2}
s.update(s1)
print(s)

s = {1, 'henry', 2, 'echo', 3, 'eliane'}
s.update(s2)
print(s)

s = {1, 'henry', 2, 'echo', 3, 'eliane'}
s.update(s3)
print(s)

s = {1, 'henry', 2, 'echo', 3, 'eliane'}
s.update(s4)
print(s)

3. s.pop()

# 随机删除,此时pop中不能有任何参数
s = {1, 'henry', 2, 'echo', 3, 'eliane'}
s.pop()  # 默认删除第一个元素/随机
print(s)

4. s.discard()

# 必须有一个参数,没有不报错, 不会返回值
s = {1, 'henry', 2, 'echo', 3, 'eliane'}
val = s.discard(3)
print(s)
print(val)

5. s.remove('a')

# 必须有一个参数,没有会报错
s = {1, 'henry', 2, 'echo', 3, 'eliane'}
s.remove(3)
print(s)

6. s.clear()

s = {1, 'henry', 2, 'echo', 3, 'eliane'}
s.clear()
print(s)

7. s.intersection(s1)

# 取v1 和v2 的交集
v1 = {1, 'henry', 2, 'echo', 3, 'eliane'}
v2 = {1, 3, 5, 7}
v = v1.intersection(v2)
print(v)

8. v.union(v1)

# 取并集
v1 = {1, 'henry', 2, 'echo', 3, 'eliane'}
v2 = {1, 3, 5, 7}
v = v1.union(v2)
print(v)

9. v.difference(v1)

v1 = {1, 'henry', 2, 'echo', 3, 'eliane'}
v2 = {1, 3, 5, 7}
v = v1.difference(v2)
print(v)

10. v.symmetric_difference(v1)

v1 = {1, 'henry', 2, 'echo', 3, 'eliane'}
v2 = {1, 3, 5, 7}
v = v1.symmetric_difference(v2)
print(v)
# 集合的运算
	方法
    运算法

2. 其他

  1. v.copy()
  2. v.difference_update(v2)
  3. v.symmetric_difference_update(v2)
  4. v.intersection.update(v2)
  5. v.isdisjoint(v2) # 返回 bool值
  6. v.issubset(v2)/ v.issuperset(v2)


3. 公共方法

1. len(v)

v = {1, 'henry', 2, 'echo', 3, 'eliane'}
print(len(v))

2. for 循环

# 无序输出
v = {1, 'henry', 2, 'echo', 3, 'eliane'}
for i in v:
    print(i)

3.8 公共方法

int bool str list tuple dict set
len
index
切片
step
for循环/ iterable
修改
删除

3.9 内存相关&深浅拷贝

0. 可嵌套的数据类型

  • 所有的容器类例如:list,tuple, dict,set 都可以嵌套,但set(), 只能嵌套可hash(int, bool, str, tuple 4种)的数据类型。

1. 内存相关

小数据池

  • ==判断值
  • is判断内存地址
  • python中默认会对int,str,bool进行缓存

缓存规则:

  • int型-5 — 256之间会被缓存
  • str:空和单个字符默认缓存;只包含字母、数字、下划线,也缓存; 乘数>1时,str只包含Num、ALp、_时缓存(最终长度不能超过20)
  • str:手动指定缓存
  • bool

2. 深浅拷贝

  1. 使用格式import copy(模块)
  2. 4 个结论
    • 浅拷贝只是拷贝第一层可变类型
    • 深拷贝拷贝所有可变类型的数据
    • 只要 copy ,一定会为数据开辟新的内存空间
    • tuple 浅copy地址一样, 有嵌套的可变类型,deepcopy也会拷贝tuple数据

原文地址:https://www.cnblogs.com/henryw/p/11681365.html