原文作者:我辈李想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。
数据类型和算法是日常开发的基础,虽然我们可能一直没怎么在意。我们了解的基础数据类型包括整型、浮点型、布尔类型、字符型、字节型等,组合数据类型包括列表、元祖、字典、集合。如果想要使用这些数据类型,就需要知道不同语言对这些数据两类型内置了那些方法,比如新增、读取、修改、删除。
这些基本和内置数据类型和方法如果不能满足我们,就需要自定义数据结构和算法,就比如队列、链表等。
基础数据类型为整型、浮点型、布尔型、 复数型、字符型、字节型。
intvar = 1000
# id获取内存地址
print (id(intvar),intvar)
# type获取数据类型
print (type(intvar),intvar)
139642987649936 1000
1000
floatvar = 3.14
print(type(floatvar),floatvar)
3.14
boolvar = True
print(type(boolvar),boolvar)
True
complexvar = 2 + 3j
complexvar2 = complex(3,-91)
print(type(complexvar),complexvar)
print(type(complexvar2),complexvar2)
(2+3j)
(3-91j)
# 字符型
str_var = "Hello, World!"
print(type(str_var), str_var)
Hello, World!
# 多行字符串
multi_str = """This is a
multi-line string"""
print(type(multi_str), multi_str)
This is a
multi-line string
# 单引号字符串
single_str = 'This string is in single quotes'
print(type(single_str), single_str)
This string is in single quotes
# 字节型
bytes_var = b"byte string"
print(type(bytes_var), bytes_var)
b'byte string'
python对数字方面的类型提供了很多内置方法(),数字运算包括加减乘除,除此之外还有幂次运算、根号运算;逻辑运算包括或与非等。
内置方法名称如下
除此之外,+和-也是通用的运算方法
#加法
def add(a,b):
return a+b
#减法
def subtract(a,b):
return a-b
#乘法
def multiply(a,b):
return a*b
#除法
def divide(a,b):
if b == 0:
raise ValueError("除数不能为0")
return a/b
#示例
a = 10
b = 5
print(f"{a} + {b} = {add(a,b)}")
print(f"{a} - {b} = {subtract(a,b)}")
print(f"{a} * {b} = {multiply(a,b)}")
print(f"{a} / {b} = {divide(a,b)}")
内置方法
Python 中常用的组合数据类型有列表、元组、集合和字典等。可以进行的操作包括索引,切片,加,乘,检查成员。
列表是一种有序、可变的数据类型,可以存储任意数量、类型的元素。
my_list = [1, 2, 3, "apple", "banana"]
print(type(my_list ),my_list )
[1, 2, 3, 'apple', 'banana']
常用的内置方法
创建列表的方法:
# 通过[]直接创建
my_list1 = [1, 2, 3, "apple", "banana"]
# 通过list类创建
my_tuple = ("apple", 2, 3.14, True)
my_list2 = list(my_tuple)
列表中增添元素功能(方法):
列表中删除元素功能(方法):
列表中统计元素功能(方法):
列表中查找下标功能(方法):
值得记住的遍历方法
fruits = ['apple', 'banana', 'orange', 'grape']
for index, fruit in enumerate(fruits):
print(index, fruit)
0 apple
1 banana
2 orange
3 grape
元组是一种有序、不可变的数据类型,可以存储任意数量、类型的元素。
my_tuple = ("apple", 2, 3.14, True)
print(type(my_tuple),my_tuple)
('apple', 2, 3.14, True)
常用的内置方法
集合是一种无序、可变的数据类型,不允许有重复的元素。
my_set = {1, 2, 3, "apple", "banana", "apple"}
print(type(my_set),my_set)
{1, 2, 3, 'apple', 'banana'}
常用内置方法
字典是一种无序、可变的数据类型,以键值对的形式存储数据。
# 1
my_dict = {"name": "Alice", "age": 20, "gender": "female"}
print(type(my_dict),my_dict)
# 2.
dic = dict(a = 1, b = 2, c = 3)
# 3.
list = [('aaa', 1), ('bbb', 2), ('ccc', 3)]
dic = dict(list)
# 4.
dic = dict(zip(['a','b','c'], [1, 2, 3]))
# 5.
list1 = ['a','b','c']
dic = dict.fromkeys(list1)
{'name': 'Alice', 'age': 20, 'gender': 'female'}
常用的内置方法
int 取整,round 4舍5入
# 取整
a = 3.14
b = 3.78
print(int(a))
print(int(b))
3
3
# 保留2位小数
n = 1.5555
a="%.2f"%n #%代表格式化输出,.2代表小数点后保留两位,f代表数据类型是浮点型
b = round(float(n),2) #将a通过round函数处理后赋值给a1,传入的2代表保留两位小数
print(type(a),a)
print(type(b),b)
1.56
1.56
# 1.直接转化
aa= 10.20
print('直接转化',str(aa))
# 2.保留精度
aa= 10.20
print('保留精度',str("%.2f"%aa))
直接转化 10.2
保留精度 10.20
# 加号(+)拼接字符串。
str1 = "Hello"
str2 = "World"
result = str1 + " " + str2
print(result) # 输出:Hello World
Hello World
# 格式化字符串拼接
name = "Alice"
age = 25
result = f"My name is {name} and I am {age} years old."
print(result) # 输出:My name is Alice and I am 25 years old.
My name is Alice and I am 25 years old.
# %s拼接
name = "Alice"
age = 28
message = "My name is %s and I am %d years old." % (name, age)
print(message) # 输出: My name is Alice and I am 28 years old.
My name is Alice and I am 28 years old.
# format拼接
name = "Alice"
age = 28
message = "My name is {} and I am {} years old.".format(name, age)
print(message) # 输出: My name is Alice and I am 28 years old.
My name is Alice and I am 28 years old.
# join方法默认无连接符
my_list = ['apple', 'banana', 'orange']
my_string = ' '.join(my_list)
my_string2 = ','.join(my_list)
print(type(my_string),my_string)
print(type(my_string2),my_string2)
apple banana orange
apple,banana,orange
# split分割字符串,默认空格
my_string = "apple banana orange"
my_list = my_string.split()
print(type(my_list),my_list) # 输出: ['apple', 'banana', 'orange']
['apple', 'banana', 'orange']
# list()函数分割字符串
my_string = "hello"
my_list = list(my_string)
print(type(my_list),my_list) # 输出: ['h', 'e', 'l', 'l', 'o']
['h', 'e', 'l', 'l', 'o']
# eval处理字符串中表达式
my_list = ['apple', 'banana', 'orange']
str1 = str(my_list)
s2 = eval(str1)
print(type(str1),str1)
print(type(s2),s2)
['apple', 'banana', 'orange']
['apple', 'banana', 'orange']
# split处理字符串
msg = 'hello----world'
ma = msg.split('-')
mb = filter(None, msg.split('-'))
print(type(ma),ma)
print(type(mb),mb)
for m in mb:
print(m)
['hello', '', '', '', 'world']
hello
world
l1 = ['a','b','c','d']
l2 = (1,2,3,4)
z = zip(l1,l2)
d = dict(z)
print(type(d),d)
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
class Dict2Obj(dict):
def __getattr__(self, key):
return self.get(key)
def __setattr__(self, key, value):
self[key] = value
d = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
do = Dict2Obj(d)
print(type(do),do)
print(type(do.a),do.a) # dict字段是.get('a')
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
1
a = {
"x":1,
"y":2,
"z":3
}
b = {
"x":1,
"w":11,
"z":12
}
# 查看字典a和字典b相同的键值对
print(a.items() & b.items())
# 查找所有差异
differ = set(a.items()) ^ set(b.items())
print(differ)
print(dict(differ))
{('x', 1)}
{('w', 11), ('y', 2), ('z', 3), ('z', 12)}
{'w': 11, 'y': 2, 'z': 12}
.sort 改变列表,sorted() 生成新的列表
# .sort排序,默认升序
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
numbers.sort() # 升序
print(numbers)
numbers.sort(reverse=True) # 降序
print(numbers)
[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
[9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]
# .sort排序,按字符串长度排序并打印结果
words = ['apple', 'banana', 'cherry', 'date', 'elderberry', 'fig']
words.sort(key=len)
print(words)
['date', 'fig', 'apple', 'banana', 'cherry', 'elderberry']
numbers = [5, 3, 8, 4, 2]
sorted_numbers = sorted(numbers) # 升序排序
print(sorted_numbers)
reverse_numbers = sorted(numbers, reverse=True) # 降序排序
print(reverse_numbers)
[2, 3, 4, 5, 8]
[8, 5, 4, 3, 2]
Python 3.6 之后字典是可以排序的
dic={'a': 4, 'b': 3, 'd': 1, 'c': 2}
dt = sorted(dic.items(), key=lambda x: x[1],reverse=True)
ds = dict(dt)
print(type(dt),dt)
print(type(ds),dict(ds))
[('a', 4), ('b', 3), ('c', 2), ('d', 1)]
{'a': 4, 'b': 3, 'c': 2, 'd': 1}
# 按照score的大小排序
students = [
{"name": "Tom", "score": 92},
{"name": "Jack", "score": 85},
{"name": "Lucy", "score": 87},
{"name": "Marry", "score": 99}
]
sorted_students = sorted(students, key=lambda x: x["score"], reverse=True)
print(type(sorted_students),sorted_students)
[{'name': 'Marry', 'score': 99}, {'name': 'Tom', 'score': 92}, {'name': 'Lucy', 'score': 87}, {'name': 'Jack', 'score': 85}]
# 先按score升序,再按age降序
students = [
{'name': 'Jack', 'age': 17, 'score': 89},
{'name': 'Julia', 'age': 17, 'score': 80},
{'name': 'Tom', 'age': 16, 'score': 80}
]
students.sort(key=lambda student: (student['score'], -student['age']))
print(students)
[{'age': 17, 'score': 80, 'name': 'Julia'}, {'age': 16, 'score': 80, 'name': 'Tom'}, {'age': 17, 'score': 89, 'name': 'Jack'}]
递归的方式可能存在深度限制,sys.getrecursionlimit()默认1000,
mstr = 'abc'
ml = [1,2,3]
mstr[::-1]
ml[::-1]
'cba'
[3, 2, 1]
ml = [1,2,3,4,5]
ml.reverse()
print(ml)
[5, 4, 3, 2, 1]