Python-VBA函数之旅-sorted函数

目录

一、sorted函数的常见应用场景

二、sorted函数使用注意事项

三、如何用好sorted函数?

1、sorted函数:

1-1、Python:

1-2、VBA:

2、推荐阅读:

个人主页: https://blog.csdn.net/ygb_1024?spm=1010.2135.3001.5421

 

一、sorted函数的常见应用场景

        sorted函数在Python中非常有用,因为它允许你对各种数据结构进行排序,常见的应用场景有:

1、基本列表排序:当你有一个列表并希望根据列表中的元素值进行排序时,你可以使用sorted()函数。例如,你可能有一个包含学生分数的列表,你想知道哪个学生的分数最高或最低。

2、元组列表排序:你可以对包含元组的列表进行排序,根据元组中的某个元素值,这在处理具有多个属性的数据记录时非常有用。

3、字典列表排序:如果你有一个包含字典的列表,并希望根据字典中的某个值进行排序,你可以使用sorted()函数和lambda函数作为key参数。例如,你可能有一个包含员工信息的字典列表,并希望根据员工的年龄或薪水进行排序。

4、字符串列表排序:如果你有一个包含字符串的列表,并希望按照字母顺序或字符串长度进行排序,你可以使用sorted()函数并传递适当的key参数。例如,你可能有一个包含文件名的列表,并希望按文件名长度进行排序。

5、自定义对象排序:如果你有一个自定义对象的列表,并希望根据对象的某个属性进行排序,你可以使用sorted()函数和类的属性作为key参数,这要求你的对象是可比较的,或者你可以提供一个比较函数或方法。

6、复杂对象排序:当需要根据对象的多个属性进行排序时,可以通过在key参数中提供一个函数来实现,这个函数接受一个对象作为输入,并返回一个用于排序的值(可以是元组,以便根据多个属性排序)。

7、处理文件和数据集:在处理大量数据时,你可能需要将数据按照特定顺序进行排序,以便进行进一步的分析或可视化,sorted()函数可以用于此目的。

8、算法和数据结构:在编写算法或实现数据结构(如排序算法、搜索算法、图算法等)时,sorted()函数可能是一个有用的工具,用于验证你的实现是否正确。

9、与生成器结合使用:sorted()函数可以接受任何可迭代对象作为输入,包括生成器,这允许你在不需要将整个数据集加载到内存中的情况下进行排序。

10、排序后切片操作:结合sorted()函数和列表切片,可以很容易地获取排序后的前N个元素。

11、与列表推导式结合使用:你可以将sorted()函数与列表推导式结合使用,以创建新的已排序列表,同时根据某个条件筛选或转换元素。

二、sorted函数使用注意事项

        在Python中,sorted()函数是一个非常有用的内置函数,用于对可迭代对象(如列表、元组、字典等)进行排序。相关注意事项如下:

1、原始数据不会被修改:sorted()函数返回一个新的已排序列表,而原始的可迭代对象不会被修改。

2、排序的稳定性:Python的sorted()函数在排序时保证是稳定的,即具有相同值的元素在排序后的顺序与它们在原始列表中的顺序相同。

3、排序关键字:sorted()函数允许你通过`key`参数指定一个函数,该函数将在比较元素之前应用于每个元素,这对于非数字类型(如字符串、元组、字典等)的排序特别有用。

4、排序顺序:默认情况下,sorted()函数按升序排序。你可以通过reverse=True参数将其更改为降序排序。

5、排序对象:虽然sorted()函数主要用于列表,但它也可以用于其他可迭代对象,如元组、集合和字典(当用于字典时,默认对键进行排序)。

6、性能:对于大型数据集,sorted()函数的性能可能是一个问题,在这种情况下,你可能需要考虑使用更高效的排序算法或数据结构,或者考虑是否可以在数据收集阶段就进行排序。

7、数据类型:sorted()函数可以对多种数据类型进行排序,但你需要确保你的比较操作是有意义的。例如,对于不同类型的对象(如字符串和数字),直接比较可能会导致TypeError异常,在这种情况下,你可能需要在应用sorted()之前对数据进行转换或清洗。

三、如何用好sorted函数?

        要使用好Python中的sorted()函数,你需遵循以下建议:

1、理解排序的稳定性:当排序的元素中有重复值时,sorted()函数会保持它们的原始顺序(即稳定的排序),这在进行多键排序时尤其有用。

2、选择合适的排序键:通过key参数,你可以为sorted()函数提供一个函数,该函数将应用于输入可迭代对象的每个元素,并决定排序的依据。例如,你可以根据字符串的长度、列表中的第二个元素或其他任何复杂的条件进行排序。

3、使用lambda表达式:key参数经常与lambda表达式一起使用,以简洁地定义排序键,Lambda表达式允许你快速定义简单的匿名函数。

4、考虑性能:对于大型数据集,排序可能会很耗时,如果可能的话,尝试在收集数据时就保持有序,或者在需要之前对数据进行预处理以减少排序的开销。

5、使用reverse参数:如果你想要以降序而不是默认的升序进行排序,可以设置reverse=True。

6、对字典排序:你可以使用sorted()函数对字典的键或值进行排序:默认情况下,sorted(dict)会返回按键排序的键的列表;要按值排序,可以传入dict.items()并使用key参数来指定值。

7、排序自定义对象:如果你的可迭代对象包含自定义类的实例,并且你想要根据这些实例的某个属性进行排序,你可以提供一个key函数来访问该属性。

8、避免不必要的排序:在某些情况下,你可能不需要对整个数据集进行排序。例如,如果你只需要找到最大或最小的元素,可以使用max()或min()函数,它们通常比排序整个列表更快。

9、使用sorted()函数而不是列表的`.sort()`方法:sorted()函数返回一个新的已排序列表,而列表的`.sort()`方法会修改原始列表;如果你不希望修改原始数据,或者你想要保留原始数据的多个排序版本,那么使用sorted()函数会更好。

10、利用operator模块:对于简单的排序键(如按数字大小或字符串字母顺序),你可以使用operator模块中的函数作为key参数,而不是定义自己的lambda表达式,如operator.itemgetter()函数可以用于根据元组的特定项进行排序。

1、sorted函数:
1-1、Python:
# 1.函数:sorted
# 2.功能:用于对可迭代对象进行排序
# 3.语法:sorted(iterable[, key=None, reverse=False])
# 4.参数:
# 4-1、iterable(必须):表示可迭代对象,如列表、字符串、字典等
# 4-2、key(可选):表示一个函数或方法,用来指定排序规则;默认key=None,表示直接比较元素进行排序
# 4-3、reverse(可选):一个布尔值,即排序规则,默认reverse=False,表示升序排列;若设置reverse=True,则表示降序排列
# 5.返回值:返回重新排序的列表
# 6.说明:列表对象的.sort()方法和内置sorted()函数的作用基本相同,差异如下:
# 6-1、列表对象的.sort()方法:直接修改原始列表,生成新列表,影响原始列表
# 6-2、内置sorted()函数:会建立一个原始列表的副本,该副本为排序后的列表,不影响原始列表
# 7.示例:
# 用dir()函数获取该函数内置的属性和方法
print(dir(sorted))
# ['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
# '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__',
# '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__',
# '__str__', '__subclasshook__', '__text_signature__']

# 用help()函数获取该函数的文档信息
help(sorted)

# 应用一:基本列表排序
# 示例1: 对整数列表进行排序
# 创建一个整数列表
numbers = [3, 6, 10, 8, 10, 24, 5, 11]
# 使用sorted()函数进行排序
sorted_numbers = sorted(numbers)
# 打印排序后的列表
print(sorted_numbers)
# [3, 5, 6, 8, 10, 10, 11, 24]

# 示例2: 对字符串列表进行排序
# 创建一个字符串列表
words = ['Myelsa', 'Jimmy', 'Lucy', 'Bruce']
# 使用sorted()函数进行排序
sorted_words = sorted(words, key=str.isupper)
# 打印排序后的列表
print(sorted_words)
# ['Myelsa', 'Jimmy', 'Lucy', 'Bruce']

# 示例3: 使用key参数按字符串长度排序
# 创建一个字符串列表
words = ['Myelsa', 'Jimmy', 'Lucy', 'Bruce']
# 使用sorted()函数和key参数,按字符串长度进行排序
sorted_words_by_length = sorted(words, key=len)
# 打印排序后的列表
print(sorted_words_by_length)
# ['Lucy', 'Jimmy', 'Bruce', 'Myelsa']

# 示例4: 对字典列表按某个键值排序
# 创建一个包含字典的列表
students = [{'name': 'Myelsa', 'age': 18}, {'name': 'Bruce', 'age': 6}, {'name': 'Jimmy', 'age': 15}]
# 使用sorted() 函数key参数,按'age'键值进行排序
sorted_students_by_age = sorted(students, key=lambda s: s['age'])
# 打印排序后的列表
print(sorted_students_by_age)
# [{'name': 'Bruce', 'age': 6}, {'name': 'Jimmy', 'age': 15}, {'name': 'Myelsa', 'age': 18}]

# 示例5: 对字典列表按多个键值排序(先按年龄,再按名字)
# 创建一个包含字典的列表
students = [{'name': 'Myelsa', 'age': 18}, {'name': 'Jimmy', 'age': 15}, {'name': 'Bruce', 'age': 6}]
# 使用sorted()函数和key参数,先按'age'键值进行排序,然后按'name'键值进行排序
sorted_students_by_age_and_name = sorted(students, key=lambda s: (s['age'], s['name']))
# 打印排序后的列表
print(sorted_students_by_age_and_name)
# [{'name': 'Bruce', 'age': 6}, {'name': 'Jimmy', 'age': 15}, {'name': 'Myelsa', 'age': 18}]

# 示例6: 使用reverse参数进行降序排序
# 创建一个整数列表
numbers = [3, 6, 10, 8, 10, 24, 5, 11]
# 使用sorted()函数和reverse参数进行降序排序
sorted_numbers_desc = sorted(numbers, reverse=True)
# 打印排序后的列表
print(sorted_numbers_desc)
# [24, 11, 10, 10, 8, 6, 5, 3]

# 应用二:元组列表排序
# 示例1: 对元组列表按照第一个元素排序
# 创建一个包含元组的列表
tuples_list = [(3, 'apple'), (1, 'banana'), (4, 'cherry'), (1, 'date')]
# 使用sorted()函数按照元组的第一个元素进行排序
sorted_tuples = sorted(tuples_list, key=lambda x: x[0])
# 打印排序后的列表
print(sorted_tuples)
# [(1, 'banana'), (1, 'date'), (3, 'apple'), (4, 'cherry')]

# 示例2: 对元组列表按照第二个元素(字符串)进行排序
# 创建一个包含元组的列表
tuples_list = [(3, 'apple'), (1, 'banana'), (4, 'cherry'), (2, 'apple')]
# 使用sorted()函数按照元组的第二个元素(字符串)进行排序
sorted_tuples = sorted(tuples_list, key=lambda x: x[1])
# 打印排序后的列表
print(sorted_tuples)
# [(3, 'apple'), (2, 'apple'), (1, 'banana'), (4, 'cherry')]

# 示例3: 对元组列表先按第一个元素(降序),然后按第二个元素(升序)进行排序
# 创建一个包含元组的列表
tuples_list = [(3, 'apple'), (1, 'banana'), (3, 'cherry'), (2, 'apple')]
# 使用sorted()函数和key参数,先按元组的第一个元素(降序),然后按第二个元素(升序)进行排序
sorted_tuples = sorted(tuples_list, key=lambda x: (-x[0], x[1]))
# 打印排序后的列表
print(sorted_tuples)
# [(3, 'apple'), (3, 'cherry'), (2, 'apple'), (1, 'banana')]

# 应用三:字典列表排序
# 示例1: 对字典列表按照某个键的值进行升序排序
# 创建一个包含字典的列表
dict_list = [
    {'name': 'Myelsa', 'age': 18},
    {'name': 'Bruce', 'age': 6},
    {'name': 'Jimmy', 'age': 15},
]
# 使用sorted()函数和key参数,按照'age'键的值进行升序排序
sorted_dict_list = sorted(dict_list, key=lambda item: item['age'])
# 打印排序后的列表
print(sorted_dict_list)
# [{'name': 'Bruce', 'age': 6}, {'name': 'Jimmy', 'age': 15}, {'name': 'Myelsa', 'age': 18}]

# 示例2: 对字典列表按照某个键的值进行降序排序
# 创建一个包含字典的列表
dict_list = [
    {'name': 'Myelsa', 'age': 18},
    {'name': 'Bruce', 'age': 6},
    {'name': 'Jimmy', 'age': 15},
]
# 使用sorted()函数和key参数,以及reverse参数,按照'age'键的值进行降序排序
sorted_dict_list_desc = sorted(dict_list, key=lambda item: item['age'], reverse=True)
# 打印排序后的列表
print(sorted_dict_list_desc)
# [{'name': 'Myelsa', 'age': 18}, {'name': 'Jimmy', 'age': 15}, {'name': 'Bruce', 'age': 6}]

# 示例3: 对字典列表按照多个键进行排序(先按一个键升序,后按另一个键降序)
# 创建一个包含字典的列表
dict_list = [
    {'name': 'Myelsa', 'age': 18},
    {'name': 'Bruce', 'age': 6},
    {'name': 'Jimmy', 'age': 15},
]
# 假设我们想要先按'age'升序排序,然后按'name'降序排序
sorted_dict_list_multi = sorted(dict_list, key=lambda item: (
item['age'], -ord(item['name'][0])))  # 使用ord()将字符串的第一个字符转换为ASCII值以便排序
# 打印排序后的列表
print(sorted_dict_list_multi)
# [{'name': 'Bruce', 'age': 6}, {'name': 'Jimmy', 'age': 15}, {'name': 'Myelsa', 'age': 18}]

# 应用四:字符串列表排序
# 示例1: 对字符串列表进行升序排序
# 创建一个字符串列表
string_list = ['banana', 'apple', 'cherry', 'orange']
# 使用sorted()函数进行升序排序
sorted_strings = sorted(string_list)
# 打印排序后的列表
print(sorted_strings)
# ['apple', 'banana', 'cherry', 'orange']

# 示例2: 对字符串列表进行降序排序
# 创建一个字符串列表
string_list = ['banana', 'apple', 'cherry', 'orange']
# 使用sorted()函数和 reverse 参数进行降序排序
sorted_strings_desc = sorted(string_list, reverse=True)
# 打印排序后的列表
print(sorted_strings_desc)
# ['orange', 'cherry', 'banana', 'apple']

# 示例3: 对字符串列表按字符串长度进行排序
# 创建一个字符串列表
string_list = ['banana', 'apple', 'cherry', 'orange']
# 使用sorted()函数和key参数,按字符串长度进行排序
sorted_strings_by_length = sorted(string_list, key=len)
# 打印排序后的列表
print(sorted_strings_by_length)
# ['apple', 'banana', 'cherry', 'orange']

# 示例4: 对字符串列表按字符串中某个字符的位置进行排序
# 创建一个字符串列表
string_list = ['banana', 'apple', 'cherry', 'orange']
# 假设我们想要根据字符串中'a'的第一个出现位置进行排序
# 使用sorted()函数和自定义的key函数
def find_first_a(s):
    return s.find('a') if 'a' in s else float('inf')  # 如果'a'不在字符串中,返回无穷大
sorted_strings_by_a_position = sorted(string_list, key=find_first_a)
# 打印排序后的列表
print(sorted_strings_by_a_position)  # 输出将会基于'a'在每个字符串中的第一个出现位置进行排序
# ['apple', 'banana', 'orange', 'cherry']

# 应用五:自定义对象排序
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __repr__(self):
        return f'Person({self.name}, {self.age})'
# 创建一个Person对象的列表
people = [
    Person('Myelsa', 18),
    Person('Bruce', 6),
    Person('Jimmy', 15),
]
# 使用sorted()函数和lambda表达式作为key函数,按age属性进行升序排序
sorted_people_by_age = sorted(people, key=lambda person: person.age)
# 打印排序后的列表
print(sorted_people_by_age)
# 使用sorted()函数和reverse参数,按age属性进行降序排序
sorted_people_by_age_desc = sorted(people, key=lambda person: person.age, reverse=True)
# 打印排序后的列表
print(sorted_people_by_age_desc)
# 如果你想先按age升序排序,然后按name升序排序(在age相同的情况下)
sorted_people_multi = sorted(people, key=lambda person: (person.age, person.name))
# 打印排序后的列表
print(sorted_people_multi)
# [Person(Bruce, 6), Person(Jimmy, 15), Person(Myelsa, 18)]
# [Person(Myelsa, 18), Person(Jimmy, 15), Person(Bruce, 6)]
# [Person(Bruce, 6), Person(Jimmy, 15), Person(Myelsa, 18)]

# 应用六:复杂对象排序
class Employee:
    def __init__(self, name, department, salary):
        self.name = name
        self.department = department
        self.salary = salary
    def __repr__(self):
        return f'Employee({self.name}, {self.department}, {self.salary})'
# 创建一个 Employee 对象的列表
employees = [
    Employee('Lucy', 'HR', 50000),
    Employee('Bruce', 'Engineering', 60000),
    Employee('Jimmy', 'Engineering', 55000),
    Employee('David', 'HR', 52000),
]
# 使用sorted()函数和lambda表达式作为key函数,首先按部门排序(字母顺序),然后按薪水降序排序
sorted_employees = sorted(employees, key=lambda emp: (emp.department, -emp.salary))
# 打印排序后的列表
print(sorted_employees)
# 如果你想在薪水相同时再按名字排序
sorted_employees_full = sorted(employees, key=lambda emp: (emp.department, -emp.salary, emp.name))
# 打印排序后的列表
print(sorted_employees_full)
# [Employee(Bruce, Engineering, 60000), Employee(Jimmy, Engineering, 55000), Employee(David, HR, 52000), Employee(Lucy, HR, 50000)]
# [Employee(Bruce, Engineering, 60000), Employee(Jimmy, Engineering, 55000), Employee(David, HR, 52000), Employee(Lucy, HR, 50000)]

# 应用七:处理文件和数据集
# 读取文件并分割每行的数据
with open('test.txt', 'r') as file:
    data = [line.strip().split() for line in file]
# 将数据转换为可以排序的形式(例如,将年龄转换为整数)
data_with_ages = [(name, int(age)) for name, age in data]
# 使用sorted()函数对数据进行排序(按年龄升序)
sorted_data = sorted(data_with_ages, key=lambda x: x[1])
# 如果需要,你可以将排序后的数据转换回原始格式(名字和年龄作为字符串)
sorted_data_str = [(name, str(age)) for name, age in sorted_data]
# 打印排序后的数据
for name, age in sorted_data_str:
    print(f"{name} {age}")
# apple 24
# banana 32
# cherry 46
# orange 58

# 应用八:算法和数据结构
# 假设我们有两个已排序的列表
list1 = [1, 3, 5, 7]
list2 = [2, 4, 6, 8]
# 使用sorted()函数和列表推导式来合并并排序两个列表
# 注意:这不是最高效的方法,因为它会重新排序合并后的列表
# 通常我们会使用双指针法或heapq.merge()来合并已排序列表
merged_list = sorted(list1 + list2)
print(merged_list)
# 更高效的方法(不使用sorted())
def merge_sorted_lists(list1, list2):
    merged = []
    i = j = 0
    while i < len(list1) and j < len(list2):
        if list1[i] < list2[j]:
            merged.append(list1[i])
            i += 1
        else:
            merged.append(list2[j])
            j += 1
    # 添加剩余的元素(如果有的话)
    merged.extend(list1[i:])
    merged.extend(list2[j:])
    return merged
# 使用更高效的方法合并列表
efficient_merged_list = merge_sorted_lists(list1, list2)
print(efficient_merged_list)
# [1, 2, 3, 4, 5, 6, 7, 8]
# [1, 2, 3, 4, 5, 6, 7, 8]

# 应用九:与生成器结合使用
# 定义一个生成器,它生成从1到10的平方数
def squares_generator(n):
    for i in range(1, n + 1):
        yield i ** 2
# 使用sorted()函数与生成器结合,按从小到大的顺序对平方数进行排序
sorted_squares = sorted(squares_generator(10))
# 打印排序后的平方数
print(sorted_squares)
# 另一个示例:使用sorted()和lambda表达式与生成器结合,按从大到小的顺序对平方数进行排序
sorted_squares_desc = sorted(squares_generator(10), reverse=True)
# 打印按降序排序后的平方数
print(sorted_squares_desc)
# 如果你想要根据某种复杂的逻辑进行排序,你可以使用lambda表达式
# 假设我们想要根据平方数的奇偶性进行排序,奇数在前,偶数在后
sorted_squares_odd_even = sorted(squares_generator(10), key=lambda x: (x % 2, x))
# 打印按奇偶性排序后的平方数
print(sorted_squares_odd_even)
# 注意:由于奇数和偶数各自内部还是按数值大小排序的,所以结果可能因Python版本或实现细节略有不同
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# [100, 81, 64, 49, 36, 25, 16, 9, 4, 1]
# [4, 16, 36, 64, 100, 1, 9, 25, 49, 81]

# 应用十:排序后切片操作
# 假设我们有一个包含整数的列表
numbers = [3, 6, 10, 8, 10, 24, 5, 11]
# 使用sorted()函数对列表进行排序
sorted_numbers = sorted(numbers)
# 打印排序后的整个列表
print("Sorted numbers:", sorted_numbers)
# 使用切片操作获取排序后列表的前三个元素
first_three = sorted_numbers[:3]
# 打印切片后的列表
print("First three elements:", first_three)
# 使用切片操作获取排序后列表的中间三个元素(如果列表长度大于或等于5)
middle_three = sorted_numbers[1:4]  # 注意:切片操作是左闭右开的
# 打印切片后的列表
print("Middle three elements:", middle_three)
# 使用切片操作获取排序后列表的最后两个元素
last_two = sorted_numbers[-2:]
# 打印切片后的列表
print("Last two elements:", last_two)
# 注意:切片操作不会修改原始列表,而是返回一个新的列表切片
print("Original list is unchanged:", numbers)
# Sorted numbers: [3, 5, 6, 8, 10, 10, 11, 24]
# First three elements: [3, 5, 6]
# Middle three elements: [5, 6, 8]
# Last two elements: [11, 24]
# Original list is unchanged: [3, 6, 10, 8, 10, 24, 5, 11]

# 应用十一:与列表推导式结合使用
# 示例1:将字符串列表转换为整数列表并排序
# 假设我们有一个包含数字的字符串列表
string_numbers = ['3', '6', '10', '8', '10', '24', '5', '11']
# 使用列表推导式将字符串转换为整数,并使用sorted()排序
sorted_int_numbers = sorted(int(num) for num in string_numbers)
print(sorted_int_numbers)
# [3, 5, 6, 8, 10, 10, 11, 24]

# 示例2:根据字典列表中某个键的值进行排序
# 假设我们有一个字典列表,每个字典代表一个学生,包含姓名和分数
students = [{'name': 'Myelsa', 'score': 98},
            {'name': 'Bruce', 'score': 85},
            {'name': 'Jimmy', 'score': 95}]
# 使用列表推导式和sorted()按分数排序学生(降序)
sorted_students_desc = sorted(students, key=lambda s: s['score'], reverse=True)
for student in sorted_students_desc:
    print(student['name'], student['score'])
# Myelsa 98
# Jimmy 95
# Bruce 85

# 示例3:根据元组列表中元组的多个元素进行排序
# 假设我们有一个元组列表,每个元组包含两个数字
tuples_list = [(3, 6), (10, 8), (10, 24), (5, 11)]
# 使用列表推导式和sorted()先按第一个元素排序,然后按第二个元素排序
sorted_tuples = sorted(tuples_list, key=lambda t: (t[0], t[1]))
print(sorted_tuples)
# [(3, 6), (5, 11), (10, 8), (10, 24)]
1-2、VBA:
略,待后补。
2、推荐阅读:

2-1、Python-VBA函数之旅-round()函数

Python算法之旅:Algorithm

Python函数之旅:Functions

个人主页: https://blog.csdn.net/ygb_1024?spm=1010.2135.3001.5421

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/612655.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【WEEK11】 【DAY4】Employee Management System Part 5【English Version】

2024.5.9 Thursday Continued from 【WEEK11】 【DAY3】Employee Management System Part 4【English Version】 Contents 10.6. Add Employee10.6.1. Modify list.html10.6.2. Modify EmployeeController.java10.6.3. Create add.html10.6.4. Restart and Run 10.6. Add Emplo…

【Vue3进阶】- Pinia

什么是Pinia Pinia 是 Vue 的专属状态管理库&#xff0c;它允许你跨组件或页面共享状态。它提供了类似于 Vuex 的功能&#xff0c;但比 Vuex 更加简单和直观。 需要在多个组件之间共享状态或数据时使用 Pinia 的 store&#xff0c;这样可以避免 props 和 eventBus 等传统方法…

刷代码随想录有感(62):修建二叉搜索树

题干&#xff1a; 代码&#xff1a; class Solution { public:TreeNode* traversal(TreeNode* root, int low, int high){if(root NULL)return NULL;if(root->val < low)return traversal(root->right, low, high);if(root->val > high)return traversal(ro…

MATLAB 基于格网的点云最低点采样 (69)

MATLAB 基于格网的点云最低点采样 (69) 一、算法原理二、算法实现1.代码2.效果三、数据链接一、算法原理 最低点格网采样是一种基于点云数据的简化技术。它通过将点云数据划分为网格,并在每个网格单元中保留最低的点来实现简化。以下是该方法的步骤: 1 定义格网尺度: 选…

服务智能化公共生活场景人员检测计数,基于YOLOv9系列【yolov9/yolov9-c/yolov9-e】参数模型开发构建公共生活场景下人员检测计数识别系统

在当今社会&#xff0c;随着科技的飞速发展&#xff0c;各种智能化系统已广泛应用于各个领域&#xff0c;特别是在人员密集、流动性大的场合&#xff0c;如商场、火车站、景区等&#xff0c;智能人员检测计数系统发挥着至关重要的作用。特别是在特殊时期&#xff0c;如节假日、…

简单的神经网络

一、softmax的基本概念 我们之前学过sigmoid、relu、tanh等等激活函数&#xff0c;今天我们来看一下softmax。 先简单回顾一些其他激活函数&#xff1a; Sigmoid激活函数&#xff1a;Sigmoid函数&#xff08;也称为Logistic函数&#xff09;是一种常见的激活函数&#xff0c…

EPAI手绘建模APP动画、场景、手势操作

(15) 动画 图 299 动画控制器 ① 打开动画控制器。播放动画过程中&#xff0c;切换场景观察视角时&#xff0c;自动停止播放。动画编辑参见常用工具栏-更多-动画动画编辑器部分。 ② 关闭动画控制器。 ③ 设置动画参数&#xff1a;设置动画总帧数&#xff1b;这只帧率&#x…

从RAID 0到RAID 10:全面解析RAID技术与应用

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、磁盘阵列简介 2、磁盘阵列诞生背景 3、硬件RA…

Spring Boot集成activiti快速入门Demo

1.什么事activiti&#xff1f; Activiti是一个工作流引擎,可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言BPMN2.0进行定义,业务流程按照预先定义的流程进行执行,实现了系统的流程流activiti进行管理,减少业务系统由于流程变更进行系统升级改造的工作量,从而提高系…

与队列和栈相关的【OJ题】

✨✨✨专栏&#xff1a;数据结构 &#x1f9d1;‍&#x1f393;个人主页&#xff1a;SWsunlight 目录 一、用队列实现栈&#xff1a; 1、2个队列的关联起来怎么由先进先出转变为先进后出&#xff1a;&#xff08;核心&#xff09; 2、认识各个函数干嘛用的&#xff1a; …

pgbackrest 备份工具使用 postgresql

为啥我会使用pgbackrest进行备份&#xff1f;因为postgresql没有自带的差异备份工具。。。而我们在生产环境上&#xff0c;一般都需要用到差异备份或者增量备份。我们的备份策略基本是&#xff0c;1天1次完整备份&#xff0c;1个小时1次差异备份。如果只需要完整备份&#xff0…

【Mac】Indesign 2023 Mac(ID2023) v18.5中文版安装教程

软件介绍 Adobe InDesign是一款由Adobe Systems开发的桌面排版软件&#xff0c;旨在用于创建、编辑和格式化印刷和数字出版物&#xff0c;如书籍、杂志、报纸、传单等。以下是一些关于Adobe InDesign的主要特点和功能&#xff1a; 1.强大的排版工具&#xff1a;InDesign提供了…

Linux的命令(第二篇)

昨天学习到了第17个命令到 rm 命令&#xff08;作用删除目录和文件&#xff09;&#xff0c;今天继续往下里面了解其他命令以及格式、选项&#xff1a; &#xff08;17&#xff09;wc命令&#xff08;此wc非wc&#xff09; 作用&#xff1a;统计行数、单词数、字符分数。 格…

JavaScript使用 BigInt

在 JavaScript 中&#xff0c;最大的安全整数是 2 的 53 次方减 1&#xff0c;即 Number.MAX_SAFE_INTEGER&#xff0c;其值为 9007199254740991。这是因为 JavaScript 中使用双精度浮点数表示数字&#xff0c;双精度浮点数的符号位占 1 位&#xff0c;指数位占 11 位&#xff…

探索计算之美:HTML CSS 计算器案例

本次案例是通过HTML和CSS&#xff0c;我们可以为计算器赋予独特的外观和功能&#xff1b; 在这个计算器中&#xff0c;你将会发现&#xff1a; 简洁清晰的界面设计&#xff0c;使用户能够轻松输入和查看计算结果。利用HTML构建的结构&#xff0c;确保页面具有良好的可访问性和…

gitee 简易使用 上传文件

Wiki - Gitee.com 官方教程 1.gitee 注册帐号 2.下载git 安装 http://git-scm.com/downloads 3. 桌面 鼠标右键 或是开始菜单 open git bash here 输入&#xff08;复制 &#xff0c;粘贴&#xff09; 运行完成后 刷新网页 下方加号即可以添加文件 上传文件 下载 教程…

前端崽的java study笔记

文章目录 basic1、sprint boot概述2、sprint boot入门3、yml 配置信息书写和获取 basic 1、sprint boot概述 sprint boot特性&#xff1a; 起步依赖&#xff08;maven坐标&#xff09;&#xff1a;解决配置繁琐的问题&#xff0c;只需要引入sprint boot起步依赖的坐标就行 自动…

【敦煌网注册/登录安全分析报告】

敦煌网注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大…

基于STM32移植lvgl(V8.2)(SPI接口的LCD)

目录 概述 1 认识LVGL 1.1 LVGL官网 1.2 LVGL库文件下载 2 认识SPI接口型LCD 2.1 PIN引脚定义 2.2 MCU IO与LCD PIN对应关系 3 实现LCD驱动 3.1 使用STM32Cube配置Project 3.2 STM32Cube生成工程 4 移植LVGL 4.1 准备移植文件 4.2 添加lvgl库文件到项目 4.2.1 src下…

工作中使用Optional过滤出符合条件的数据

工作中使用Optional获取非空对象的属性 实体类Optional对非空对象的处理满足过滤条件返回的值不满足条件返回的值 实体类 package po;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.io.Serializable;Data AllArgsConst…