Python第二天-基本数据类型
整体介绍
python有以下几种基本类型,int,float,str,range,slice,bool,list,tuple,dict,set
详细介绍
int
int表示整型数字,不管多大的数字都可以用int表示,整合了java中的byte,short,int,long。
将其他类型转换成int类型
a = '123'
b = int(a, base=10)
可以将字符串,布尔值,字节数组转换成int值,第二个参数为进制,默认10进制,如果为非字符串,不能设置进制。类似java的Integer.parseInt方法。
获取二进制长度
a = 5
print(a.bit_length())
类似java的Integer.toBinaryString().length()
运算符
print(1 + 1) # 加
print(1 - 1) # 减
print(1 * 1) # 乘
print(1 / 1) # 除 结果为 float
print(1 // 1) # 整除 结果为 int
print(1 % 1) # 取余
print(1 ** 1) # 次方 类似java的Math.power()
float
float表示浮点数
price = 12.5
print(type(price))
print(float(12))
print(float("12.45"))
bool
bool 表示布尔值,python中bool是继承int类型的,True表示1,False表示0
print(bool(0))
print(bool(1))
print(bool(2))
print(bool(""))
print(bool(" "))
print(bool("ad"))
可以将int或str转换成bool类型,0或空字符串为false,其他都是True。
str
str表示字符串类型,字符串都是比可变的,每次操作都会创建一个新的字符串对象。
各种方法
print("this is".capitalize()) # Abc 首字符大写 其余小写 类似java中apache commons StringUtils.capitalize()
print("ABC".center(7, "*")) # **ABC** 左右填充数据 内容居中 填充内容只能是一个字符 类似java中StringUtils.center()
print("AABBCC".count("ABC")) # 子字符串包含的数量 类似java中StringUtils.countMatches()
print("ABC".startswith("AB")) # 是否以某前缀开始 类似java的String.startsWith()
print("ABC".endswith("AB")) # 是否以某后缀结束 类似java的String.endsWith()
print("A\tB\tC".expandtabs(3)) # 将tab字符使用空格扩展,默认8个空格
print("ABC".find("BC")) # 找到的第一个索引 找不到为-1 类似java的String.indexOf()
print("ABC".rfind("C")) # 找到的最后一个索引 找不到为-1 类似java的String.lastIndexOf()
print("ABC".index("A")) # 找到的第一个索引 找不到抛出错误
print("I am %s,age is %d" % ("lisi", 23)) # 格式化 根据名字 类似java的String.format()
print("I am {name},age is {age}".format(age=23, name="lisi")) # 格式化 根据名字 类似java的String.format()
print("I am {0},age is {1}".format("lisi", 24)) # 格式化 根据索引
print("I am {name},age is {age}".format_map({"name": "lisi", "age": 21})) # 格式化 根据字典
print("abc123".isalnum()) # 是否只包含字符和数字 不能包含特殊字符 空白字符 类似java中StringUtils.isAlphanumeric()
print("abc".isalpha()) # 是否只包含字符 不能包含特殊字符 空白字符 数字 类似java中StringUtils.isAlpha()
print("234".isdecimal()) # 是否只包含十进制数字
print("234".isdigit()) # 是否只包含数字
print("dict".isidentifier()) # 是否是python标识符
print("abc".lower()) # 转换成小写 类似java中StringUtils.toLowerCase()
print("abc".islower()) # 是否是小写字符串 类似java中StringUtils.isAllLowerCase()
print("ABC".upper()) # 转换成大写 类似java中StringUtils.toUpperCase()
print("ABC".isupper()) # 是否是大写字符串 类似java中StringUtils.isAllUpperCase()
print("12.4".isnumeric()) # 是否只包含数字 类似java中StringUtils.isNumeric()
print("abc".isprintable()) # 是否为可打印字符串 \t \n 都是不可打印字符
print(" \t".isspace()) # 是否为空白字符串 空格 制表符 换行符 类似java中StringUtils.isBlank()
print("Abc".istitle()) # 是否每个单词为首字母大写 其余小写
print("*".join(["a", "b", "c"])) # 以某字符串分隔符合并成新的字符串 类似java的String.join()
print("abc".ljust(5, "*")) # 右边填充数据 类似java中StringUtils.leftPad()
print("abc".rjust(5, "*")) # 左边填充数据 类似java中StringUtils.rightPad()
print(" abc abc ".lstrip().__len__()) # 去除左边空白字符 类似java中StringUtils.stripStart()
print(" abc abc ".rstrip().__len__()) # 去除右边空白字符 类似java中StringUtils.stripEnd()
print(str.maketrans("abc", "123")) # 创建一个映射关系 dict类型
print("a*b*c".partition("*")) # 从左边开始 以一个分隔符分割成3部分
print("a*b*c".rpartition("*")) # 从右边开始 以一个分隔符分割成3部分
print("aaa".replace("a", "A", 1)) # 字符替换 默认替换所有
print("a*b*c".split("*", 1)) # 从前往后分割 分割出指定数量
print("a*b*c".rsplit("*", 1)) # 从后往前分割 分割出指定数量
print("a\nb\nc".splitlines()) # 按行分割
print("Abc".swapcase()) # 大写转小写 小写转大写
print("this is".title()) # 间将每个单词首字符大写 其余小写
print("abc".translate(str.maketrans("abc", "123"))) # 将字符串根据映射关系转换成新字符串
print("abc".zfill(5)) # 用0填充左边
print(len("abc")) # 字符串长度 类似java中String.length()
print("a" in "abc") # 是否包含 类似java中String.contains()
print("abc".encode(encoding="utf-8")) # 将字符串编码为字节数组 默认编码utf-8
单引号 双引号 三引号
print("i'am lisi")
print('i"am lisi')
abc = """
hello
world
lisi
"""
print(abc)
单引号和双引号都可以声明字符串,在单引号中包含双引号不需要转义,反之亦然。三引号(包括单引号和双引号)可以让字符串原样输出。
迭代
print("abc"[1]) # 根据索引获取子字符串
print("abcdefghijklmnopqrst"[0:-1:3]) # 根据切片获取子字符串
for x in "abcd":
print(x)
range
range表示一个不可变的数字序列
a = range(0, 10, 2)
for i in a:
print(i)
print(a.index(2))
print(a.count(2))
创建一个range对象,包含3个属性
start:开始位置,默认0,
stop:结束位置,不包括结束
step:步长,默认1
range不会存储实际的数据,每次使用到才会计算,只会占用很少的内存,这也是对比list,tuple类型的优势。
slice
slice可以看做一个切片,表示字符串str,集合list,元组tuple的索引的不可变集合
s = slice(0, 10, 2)
print("abcdefghijklmn"[s]) # 字符串截取
print("abcdefghijklmn"[0:10:2]) # 字符串截取
print([1, 2, 3, 4, 5, 6, 7, 8, 9][s]) # list截取
print((1, 2, 3, 4, 5, 6, 7, 8, 9)[s]) # tuple截取
print(s.indices(5)) # 返回一个包含start,stop,step的tuple 参数比stop大,取之前的,小的话取参数
创建一个slice也是需要start,stop,step3个参数
list
list表示一个可变的列表,类似java中的List。可以存放任意类型的元素。
names = ["lisi", "wangwu", 12, 24, ["a", "b"]]
li = list("abcd")
names.append("c") # 追加元素
names.insert(-1, "d") # 指定索引元素之前插入元素
names[-1] = "e" # 指定索引元素修改
del names[-1] # 指定索引元素删除
names[0:2] = ["x", "y"] # 指定切片元素修改
del names[0:2] # 指定切片元素删除
print(names, li)
print(names.count(12)) # 统计元素数量
print(names.index(12)) # 查找元素索引 找不到抛出错误
print(names.pop()) # 删除最后一个元素并返回
names.remove(12) # 删除元素
print(names.copy()) # 列表拷贝 返回一个新的列表
names.reverse() # 列表数据翻转
names.clear() # 清空
names = [23, 12, 56]
names.sort(key=lambda x: x, reverse=True) # 列表排序 key指定排序字段,reverse表示是否翻转
names.extend(["d", "e"]) # 批量追加元素
print("d" in names) # 元素是否在列表中
print(names)
tuple
tuple在python中称做元组,表示一个不可变的列表,内容包括添加,修改,删除,类似java中的ImmutableList。
tu = (2) # 不加,表示int
print(type(tu)) # int 类型
tu = (2,) # 定义元组
print(type(tu)) # tuple类型
tu = tuple([1, 2, 3]) # 根据迭代器对象创建元组
print(type(tu))
print(tu.count(1)) # 元素数量
print(tu.index(1)) # 元素索引
dict
dict表示一个字典,键值对的集合,类似java中的Map。
person = {
"name": "lisi",
3: 5,
True: True,
(1, 2,): [1, 2],
} # 定义字典
person["age"] = 34 # 添加或修改键值对
del person["age"] # 删除键值对
print("name" in person) # key是否存在
person["age"] = 4
print(person.get("age")) # 获取key对应的值 key不存在返回None
print(person["age"]) # 获取key对应的值 key不存在报错
print(person.pop("age")) # 删除key并返回value
print(person.popitem()) # 按后进先出的顺序删除一个键值对 字典为空,报错
print(person.copy()) # 字典拷贝
print(person.update({"name": "li"})) # 将新字典的值更新到原字典中
print(person)
for key in person.keys(): # 遍历key
print(key)
for val in person.values(): # 遍历value
print(val)
for key, val in person.items(): # 遍历key,value
print(key, val)
person.clear() # 字典清空
print(person)
set
set表示无序的不重复的集合,只能存储不可变类型,如int,float,str,tuple
name_set = {"lisi", "Tom", "Mary", "xioaming"} # 定义集合
age_set = set([4, 6, 8, 2]) # 定义集合
print(name_set)
name_set.add("xioali") # 添加元素
print(name_set)
print(name_set.copy()) # 集合复制
print(name_set.difference({"lisi", "Tom"})) # 集合求差集
name_set.difference_update({"lisi", "Tom"}) # s1=s1.difference(s2) 集合求差集并更新原集合
print(name_set)
name_set.discard("lisi")
print(name_set)
print(name_set.intersection({"Mary"})) # 集合求交集
name_set.intersection_update({"Mary"}) # 集合求交集并更新原集合
print(name_set.isdisjoint({"Mary"})) # 是否没有交集
print(name_set.issubset({"Mary"})) # 是否为子集
print(name_set.issuperset({"Mary"})) # 是否为父集
print(name_set.pop()) # 随机删除并返回
name_set.add("Mary")
name_set.remove("Mary") # 删除元素 不存在抛出错误
print(name_set.symmetric_difference({"Mary"})) # 集合求交叉补集
name_set.symmetric_difference_update({"Mary"}) # 集合求交叉补集并更新原集合
print(name_set.union({"Mary"})) # 集合求并集
name_set.update({"Mary"}) # 集合求并集并更新原集合
print(name_set)
name_set.clear() # 集合清空
print(name_set)
age_set = frozenset([1, 2, 3, 4, 4]) # 定义不可变集合
print(age_set)