Python青少年简明教程:列表(List)、元组(tuple)和字典(dict)

news2024/9/21 16:26:57

Python青少年简明教程:列表(List)、元组(tuple)和字典(dict)

在Python中,列表(List)、元组(Tuple)和字典(Dict)既是常用的数据类型,也是常用的数据结构。

【数据类型:在编程语言中,数据类型定义了一个变量的存储方式以及可以对该变量执行的操作。从 Python 语言的角度来看,Python 中的列表、元组和字典都属于数据类型。

数据结构:数据结构是指一种组织和存储数据的方式,使得数据可以被有效地访问和修改。从计算机科学的角度来看,列表、元组和字典在Python中也是常用的数据结构,因为它们定义了组织和存储数据的方式。列表是动态数组结构,元组是静态数组结构,字典是哈希表结构。】

列表(list

在Python中,没有传统意义上像C或Java那样的“数组”数据类型,但Python提供了几种可以模拟数组行为的数据结构,如列表(list)、元组(tuple)其中最常用的是列表(List)。

列表是一种可变的、有序的数据结构,可以随时添加和删除其中的元素。

说明:从列表中取值时,如果 超出索引范围,程序会报错。

列表(list)的元素是按顺序存储的,每个元素都有一个对应的序号,也称为索引(index)。理解列表的索引对于访问和操作列表元素至关重要。

正向索引:

从左到右,从0开始递增,第一个元素的索引是0,第二个元素的索引是1,以此类推。

负向索引:

从右到左,从-1开始递减,最后一个元素的索引是-1,倒数第二个元素的索引是-2,以此类推。

Python 的列表是一个可变的序列,允许你存储不同类型的元素。

创建列表(List)的方法或方式

1.使用方括号 []:

my_list = [1, 2, 3, 4, 5]

list1 = [1, 'a', True, 3.14]

2.使用 list() 构造函数:

my_list = list(range(1, 6))  # 创建一个包含1到5的列表

list2 = list()  # 创建空列表

list3 = list("hello")  # 将字符串转换为字符列表

list4 = list(range(5))  # 使用 range 创建列表

3.列表推导式(后面还有介绍):

my_list = [x * 2 for x in range(5)]  # 生成 [0, 2, 4, 6, 8]

遍历列表中的所有元素

可以使用 for 循环遍历列表中的所有元素。例如:

fruits = ["苹果", "香蕉", "橘子", "草莓"]
for fruit in fruits:
    print(fruit)

列表切片(slicing)

在Python中,允许你获取列表中的一部分元素,并可以返回一个新的列表。切片操作的基本语法如下:

list[start:stop:step]

其中

start(开始位置): 切片开始的位置(包括该位置的元素)。如果省略,默认为列表的开始位置(索引0)。

stop(结束位置): 切片结束的位置(不包括该位置的元素)。如果省略,默认为列表的结束位置(即列表的长度)。

step(步长): 切片时元素之间的间隔。如果省略,默认为1。步长可以是正数也可以是负数,分别代表向前或向后切片。

列表切片示例:

# 创建一个示例列表
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 基本切片
print(my_list[2:5])    # 输出:[2, 3, 4]

# 从起始位置开始切片
print(my_list[:4])     # 输出:[0, 1, 2, 3]

# 从特定位置切片到结束
print(my_list[5:])     # 输出:[5, 6, 7, 8, 9]

# 使用步长
print(my_list[::2])    # 输出:[0, 2, 4, 6, 8]

# 反向切片
print(my_list[::-1])   # 输出:[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

# 指定步长
print(my_list[1:8:3])  # 输出:[1, 4, 7]

# 使用负索引
print(my_list[-3:])    # 输出:[7, 8, 9]
print(my_list[:-3])     # 输出:[0, 1, 2, 3, 4, 5, 6]
print(my_list[-5:-2])   # 输出:[5, 6, 7]
print(my_list[::-1])   # 使用负步长可以反转列表:[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

列表(List)的方法

“方法”指的是绑定到某个对象的函数,或者说,“方法”是指属于某个对象的函数,能够直接操作或查询该对象的数据。

在Python中,对于列表(list)这样的对象,方法是指那些可以在列表上调用的函数,这些函数能够直接操作列表中的数据。换句话说,方法是属于特定对象的函数,它们定义了对象的行为。

在Python中,列表(list)是一个非常灵活的数据结构,它提供了多种方法来操作和管理数据。以下是一些常用的列表方法及其示例:

1. append()

向列表末尾添加一个新元素。

my_list = [1, 2, 3]

my_list.append(4)

print(my_list)  # 输出: [1, 2, 3, 4]

2. extend()

将另一个可迭代对象的元素添加到列表末尾。

my_list = [1, 2, 3]

my_list.extend([4, 5])

print(my_list)  # 输出: [1, 2, 3, 4, 5]

3. insert()

在指定位置插入一个元素。

my_list = [1, 2, 3]

my_list.insert(1, 'a')

print(my_list)  # 输出: [1, 'a', 2, 3]

4. remove()

删除列表中第一个匹配的元素。如果元素不存在,会引发 ValueError。

my_list = [1, 2, 3, 2]

my_list.remove(2)

print(my_list)  # 输出: [1, 3, 2]

还可以使用clear() 方法,用于清空列表中的所有元素。

lst = [1, 2, 3, 4]

lst.clear()  # lst 变为 []

5. pop()

移除并返回列表中指定位置的元素(默认最后一个元素)。如果列表为空,会引发 IndexError。

my_list = [1, 2, 3]

last_element = my_list.pop()

print(last_element)  # 输出: 3

print(my_list)       # 输出: [1, 2]

6. index()

返回指定元素的第一个索引。如果元素不存在,会引发 ValueError。

my_list = [1, 2, 3]

index_of_2 = my_list.index(2)

print(index_of_2)  # 输出: 1

7. count()

返回列表中指定元素的出现次数。

my_list = [1, 2, 2, 3, 2]

count_of_2 = my_list.count(2)

print(count_of_2)  # 输出: 3

8. sort()

对列表中的元素进行排序。排序是原地进行的,即改变原列表。可以通过 reverse=True 参数进行降序排序。

my_list = [3, 1, 2]

my_list.sort()

print(my_list)  # 输出: [1, 2, 3]

my_list.sort(reverse=True)

print(my_list)  # 输出: [3, 2, 1]

9. reverse()

反转列表中的元素。排序是原地进行的,即改变原列表。

my_list = [1, 2, 3]

my_list.reverse()

print(my_list)  # 输出: [3, 2, 1]

10. copy()

返回列表的浅拷贝。即创建一个新的列表,其中包含原列表的相同元素。

my_list = [1, 2, 3]

new_list = my_list.copy()

print(new_list)  # 输出: [1, 2, 3]

还可以使用del 语句删除列表中的单个元素或切片或整个列表。注意,它是 Python 的一个语句,而不是列表的方法。例如:

lst = [1, 2, 3, 4]

del lst[1]  # lst 变为 [1, 3, 4]

del lst  # 完全删除列表

del语句删除切片例子

lst2= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del lst2 [::2]  # 删除带步长的切片,lst2变为[1, 3, 5, 7, 9]

列表(List)的常用操作

Python中的列表(List)其它常用操作(不是方法但常用):

1. len(list)

功能:返回列表中的元素个数。

my_list = [1, 2, 3, 4, 5]

length = len(my_list)

print(length)  # 输出: 5

2. in 操作符

功能:检查某个元素是否存在于列表中。如果存在,返回 True;否则,返回 False。

my_list = [1, 2, 3, 4, 5]

print(3 in my_list)  # 输出: True

print(6 in my_list)  # 输出: False

3. 列表连接(+):将两个列表连接成一个新的列表。

list1 = [1, 2, 3]

list2 = [4, 5, 6]

combined_list = list1 + list2

print(combined_list)  # 输出: [1, 2, 3, 4, 5, 6]

4. 列表重复(*):重复列表中的元素。

my_list = [1, 2, 3]

repeated_list = my_list * 3

print(repeated_list)  # 输出: [1, 2, 3, 1, 2, 3, 1, 2, 3]

5. 列表拆包:将列表的元素拆分到多个变量中(通常用于函数返回值)。

my_list = [1, 2, 3]

a, b, c = my_list

print(a, b, c)  # 输出: 1 2 3

列表(list)模拟二维数组

Python本身没有内置的二维数组类型,但可以使用嵌套列表来实现类似的功能。示例:

# 创建一个3x3的二维数组
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# 访问元素
print(matrix[0][0])  # 输出: 1
print(matrix[1][2])  # 输出: 6

# 修改元素
matrix[2][1] = 10
print(matrix)  # 输出: [[1, 2, 3], [4, 5, 6], [7, 10, 9]]

# 遍历二维数组
for row in matrix:
    for element in row:
        print(element, end=' ')
    print()  # 换行

列表综合例题

例1、创建一个包含100以内所有素数的列表

def is_prime(num):
  """判断一个数是否为素数。"""
  if num <= 1:
    return False
  for i in range(2, int(num**0.5) + 1):
    if num % i == 0:
      return False
  return True

primes = [num for num in range(2, 100) if is_prime(num)]
print(f"100 以内的所有素数:{primes}")

例2、使用列表的猜数字游戏

import random

def play_guessing_game():
  """猜数字游戏。"""
  secret_number = random.randint(1, 100)
  guesses = []
  attempts = 0

  print("欢迎来到猜数字游戏!")
  print("我已选择一个 1 到 100 之间的数字。")

  while True:
    try:
      guess = int(input("请输入你的猜测:"))
      guesses.append(guess)
      attempts += 1

      if guess < secret_number:
        print("太低了!")
      elif guess > secret_number:
        print("太高了!")
      else:
        print(f"恭喜你!你猜对了!你用了 {attempts} 次尝试。")
        print(f"你猜过的数字:{guesses}")
        break
    except ValueError:
      print("请输入一个有效的数字。")

play_guessing_game()

列表推导

使用列表推导可以简洁地创建新的列表。

列表推导(List Comprehension)是一种简洁而强大的 Python 语法,它允许你通过一行代码创建新的列表,而无需使用传统的 for 循环。它以一种紧凑且易读的方式表达列表创建逻辑。

列表推导的语法:

[expression for item in iterable if condition]

expression: 你想要在新的列表中包含的元素的表达式。

item: 迭代器中的每个元素。

iterable: 可迭代对象,例如列表、元组、字符串等。

condition (可选): 一个条件表达式,用于过滤可迭代对象中的元素。只有满足条件的元素才会被包含在新的列表中。

举例:

1)创建包含平方数的列表:
squares = [x**2 for x in range(10)]
print(squares)  # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
在这个例子中,x**2 是表达式,x 是迭代器中的每个元素,range(10) 是可迭代对象。代码将遍历 range(10) 中的每个数字,计算其平方,并将结果添加到新的列表 squares 中。

2)创建包含所有偶数的列表:
even_numbers = [x for x in range(10) if x % 2 == 0]
print(even_numbers)  # 输出: [0, 2, 4, 6, 8]
在这个例子中,x 是表达式,x 是迭代器中的每个元素,range(10) 是可迭代对象,x % 2 == 0 是条件表达式。代码将遍历 range(10) 中的每个数字,检查它是否为偶数,如果是,则将其添加到新的列表 even_numbers 中。

3)创建包含偶数的列表:
even_numbers = [x for x in range(20) if x % 2 == 0]

4)将列表中的所有字符串转换为大写:
words = ["apple", "banana", "orange"]
uppercase_words = [word.upper() for word in words]
print(uppercase_words)  # 输出: ['APPLE', 'BANANA', 'ORANGE']
在这个例子中,word.upper() 是表达式,word 是迭代器中的每个元素,words 是可迭代对象。代码将遍历 words 列表中的每个单词,将其转换为大写,并将结果添加到新的列表 uppercase_words 中。
 

除了列表推导式,Python还支持字典推导式和集合推导式,语法类似。

列表推导的优势:

简洁性: 列表推导比传统的 for 循环更简洁,代码更易读。

效率: 列表推导通常比传统的 for 循环更有效率,因为它们在底层使用 Python 的迭代器协议,减少了循环的开销。

可读性: 列表推导使代码更易于理解,因为它将列表创建逻辑集中在一个表达式中。

元组(tuple

元组是一个有序的不可变序列,可以包含多个元素,元素可以是不同的数据类型。

Python中元组(tuple)的元素索引与列表(list)的索引在索引和切片操作上表现相同,主要区别在于元组是不可变的,而列表是可变的。

括号的使用:虽然元组可以用圆括号 () 来定义,但实际上,如果元素之间用逗号分隔,Python 也会自动识别为元组。例如,1, 2, 3 被视为一个元组,在不使用括号的情况下。决定生成元组的其实是逗号而不是圆括号。

不可变性:元组一旦创建,就不能修改(例如,不能添加、删除或更改元素)。这与列表不同,列表是可变的。

元组的创建:可以通过以下方式创建元组:

使用括号:t = (1, 2, 3)

不使用括号:t = 1, 2, 3

单个元素元组需加逗号:t = (1,)

如果创建的元组中只有一个字符串类型的元素时,该元素后面必须要加一个逗号,否则 Python 解释器会将它视为字符串。

创建元组(Tuple)的方法或方式

1.使用小括号 ():

my_tuple = (1, 2, 3, 4, 5)

也可以不使用圆括号(推荐在多元素时使用圆括号):

Tuple1 = 1, 2, 3, 4, 5

2.使用 tuple() 构造函数:

Tuple2 = tuple()  # 创建空元组

Tuple3 = tuple([1, 2, 3])  # 将列表转换为元组

Tuple4 = tuple("hello")  # 将字符串转换为字符元组

创建单元素元组,要注意使用逗号:

Tuple5 = (42,)

Tuple6 = 42,

访问元组元素

可以通过索引访问元组中的元素,例如,t[0] 将访问第一个元素。
t = (1, 'hello', [3, 4])
print(t[0])  # 输出: 1
print(t[-1])  # 输出: [3, 4]

元组常用方法
count(): 计算元素出现的次数
index(): 查找元素的索引
t = (1, 2, 2, 3, 4)
print(t.count(2))  # 输出: 2
print(t.index(3))  # 输出: 3
 

元组切片

Python中元组(tuple)的切片操作与列表(list)非常相似。两者都使用相同的切片语法,主要区别在于元组是不可变的,而列表是可变的。

元组切片都语法:

tuple[start:stop:step]

start 是切片的起始索引(包括该索引所在的元素)。

stop 是切片的结束索引(不包括该索引所在的元素)。

step 是步长,默认为 1。

示例:

# 创建一个元组和一个列表
my_tuple = (0, 1, 2, 3, 4, 5)

# 基本切片
print(my_tuple[1:4])  # 输出: (1, 2, 3)

# 使用步长
print(my_tuple[::2])  # 输出: (0, 2, 4)

# 反向切片
print(my_tuple[::-1])  # 输出: (5, 4, 3, 2, 1, 0)

注意:

对元组进行切片会返回一个新的元组,而对列表进行切片会返回一个新的列表。您可以对列表切片的结果进行修改,但不能修改元组切片的结果。

python元组嵌套
元组可以嵌套,这意味着你可以在一个元组中包含其他元组。下面是一个关于元组嵌套的简单示例:
nested = ((1, 2), (3, 4))

元组与列表可以转换
t = (1, 2, 3)
l = list(t)  # 元组转列表
t2 = tuple(l)  # 列表转元组

元组特性(特点)及解释
☆不可变性:
含义:一旦创建,元组的内容就不能被改变。
解释:
不能修改现有元素的值。
不能添加新元素。
不能删除现有元素。
示例:
t = (1, 2, 3)
# t[0] = 4  # 这会引发 TypeError
# t.append(4)  # 元组没有 append 方法
# del t[0]  # 这也会引发 TypeError
注意:如果元组中包含可变对象(如列表),这些对象的内容可以改变。
☆有序:
含义:元组中的元素保持它们被创建时的顺序。
解释:
可以通过索引访问元素。
索引从 0 开始。
支持正向和反向索引。
示例:
t = ('a', 'b', 'c', 'd')
print(t[0])   # 输出: 'a'
print(t[-1])  # 输出: 'd'
☆允许重复元素:
含义:元组可以包含多个相同的值。
解释:
重复元素各自占据独立的位置和索引。
这与集合(set)不同,集合不允许重复。
示例:
t = (1, 2, 2, 3, 1)
print(t.count(1))  # 输出: 2
☆可以包含不同类型的数据:
含义:单个元组可以存储不同数据类型的元素。
解释:
这提供了很大的灵活性。
可以混合使用整数、字符串、列表等。
示例:
t = (1, "hello", [1, 2], (3, 4))
print(type(t[0]))  # 输出: <class 'int'>
print(type(t[1]))  # 输出: <class 'str'>
print(type(t[2]))  # 输出: <class 'list'>
print(type(t[3]))  # 输出: <class 'tuple'>


思考题,python元组能排序吗?
元组本身是不可变的(immutable),所以不能直接对元组进行排序。但是,我们可以使用sorted() 函数创建一个排序后的新元组。
sorted() 函数是 Python 内置的一个函数,用于对可迭代对象进行排序并返回一个新的列表。它不会修改原始数据,而是返回一个新的已排序列表。例如:
# 创建一个新的排序元组
original_tuple = (3, 1, 4, 1, 5, 9, 2)
sorted_tuple = tuple(sorted(original_tuple))
print(sorted_tuple)  # 输出: (1, 1, 2, 3, 4, 5, 9)
 

字典(dictdictionary)

字典是一种可变的、无序的数据结构,存储键值对(key-value pairs)。每个键(key)都是唯一的,并且可以通过键来快速查找对应的值(value)。

值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

可以使用大括号 {} 或 dict() 函数来创建字典。

创建字典(Dict)的方法或方式

1.使用花括号 {}:
my_dict = {'name': 'Alice', 'age': 25 , 'city': 'Beijing' }
dict1 = {1: 'one', 2: 'two', 3: 'three'}
dict2 = {"西瓜": 2.6, "桃子": 2, "苹果":3, "樱桃":10.5}
dict3 = {"西瓜":"2.6元", "桃子": "2元", "苹果":"3元", "樱桃":"10.5元"}
2.使用 dict() 构造函数:
my_dict = dict(name='Alice', age=25)  # 关键字参数
dict4 = dict()  # 创建空字典
3.使用键值对列表:
my_dict = dict([('name', 'Alice'), ('age', 25)])  # 从列表创建字典
4.字典推导式:
my_dict = {x: x ** 2 for x in range(5)}  # 生成 {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

访问字典的值
可以通过键访问字典中的值。
print(my_dict["name"])  # 输出: Alice
print(my_dict["age"])   # 输出: 25

修改字典
可以为字典中的键赋值、删除键值对或添加新键值对。例如:
# 修改值
my_dict["age"] = 26

# 添加新键值对
my_dict["city"] = "New York"

# 删除键值对
del my_dict["is_student"]

字典的方法

字典提供了多种内置方法来操作数据:

my_dict.keys():返回字典中的所有键。

my_dict.values():返回字典中的所有值。

my_dict.items():返回字典中的所有键值对。

my_dict.get(key):安全地获取键的值,如果键不存在返回 None。

my_dict.pop(key):删除指定键并返回其值。

my_dict.update(another_dict):用另一个字典更新当前字典。

字典的基本特性
☆键唯一性:
每个键在字典中必须是唯一的(字典使用哈希表实现,键的唯一性是哈希表的基本要求)。
行为:如果尝试插入已存在的键,新值会覆盖旧值。
示例:
d = {'a': 1, 'b': 2}
d['a'] = 3  # 覆盖旧值
print(d)  # 输出: {'a': 3, 'b': 2}
☆无序性:
定义:传统上,字典中的元素没有固定的顺序。
注意:虽然从 Python 3.7 开始,字典保持插入顺序,但这是一个实现细节,在使用时,你不能依赖于元素的顺序来访问数据。
影响:不能像列表那样通过数字索引访问元素。
示例:
d = {'c': 3, 'a': 1, 'b': 2}
print(d)  # 输出顺序可能是 {'c': 3, 'a': 1, 'b': 2},但不应依赖这个顺序
使用建议:如果需要有序存储,考虑使用 OrderedDict。
☆可变性:
字典的内容可以在创建后修改。可以添加新的键值对、修改现有键的值、删除键值对。
示例:
d = {'a': 1}
d['b'] = 2  # 添加新键值对
d['a'] = 10  # 修改现有键的值
del d['b']  # 删除键值对
☆键类型限制:
键必须是不可变(可哈希)的数据类型。
原因:字典使用哈希表实现,键的哈希值用于确定存储位置。
常用键类型:字符串、数字、元组(只包含不可变元素)。
值的类型:没有限制,可以是任何数据类型。
示例:
d = {
    'string': 'value',
    42: 'answer',
    (1, 2): 'tuple key',
    # [1, 2]: 'list'  # 这会引发错误,因为列表是可变的
}

字典综合示例

源码如下:

# 创建字典
person = {
    "name": "Alice",
    "age": 30,
    "city": "Wonderland"
}

# 访问字典
print(person["name"])  # 输出: Alice

# 修改字典
person["age"] = 31

# 添加新键值对
person["hobby"] = "Reading"

# 删除键值对
del person["city"]

# 使用字典方法
print(person.keys())    # 输出: dict_keys(['name', 'age', 'hobby'])
print(person.values())  # 输出: dict_values(['Alice', 31, 'Reading'])
print(person.items())   # 输出: dict_items([('name', 'Alice'), ('age', 31), ('hobby', 'Reading')])

解包(unpacking

Python 中,解包(unpacking)是指将一个可迭代对象(如列表、元组、字典等)中的元素提取出来,并分别赋值给多个变量的过程。

示例
1.序列解包:
将元组或列表中的元素解包到多个变量中。
# 使用元组解包
coordinates = (10, 20)
x, y = coordinates
print(x)  # 输出: 10
print(y)  # 输出: 20

# 使用列表解包
values = [1, 2, 3]
a, b, c = values
print(a)  # 输出: 1
print(b)  # 输出: 2
print(c)  # 输出: 3

2.字典解包:
可以使用 ** 来解包字典,将字典中的键值对传递给函数。
def print_info(name, age):
    print(f"Name: {name}, Age: {age}")

person = {'name': 'Alice', 'age': 30}
print_info(**person)  # 输出: Name: Alice, Age: 30

3.可变数量的解包:
使用星号 * 可以将剩余的元素捕获到一个列表中。

a, *b = [1, 2, 3, 4, 5]
print(a)  # 输出: 1
print(b)  # 输出: [2, 3, 4, 5]

c, *d, e = [1, 2, 3, 4, 5]
print(c)  # 输出: 1
print(d)  # 输出: [2, 3, 4]
print(e)  # 输出: 5
解包在处理多个变量时非常方便,特别是在处理函数参数、元组和列表等可迭代对象时。
 

例、使用元组作为函数的返回值可以一次返回多个值

元组可以作为函数的返回值,并且可以一次返回多个值。在Python中,函数可以返回一个元组,调用方可以通过解包来获取这些值——将返回的元组元素值解包到多个变量中。

下面是一个简单的示例:

def calculate(a, b):
    sum_value = a + b
    product_value = a * b
    return sum_value, product_value  # 返回一个元组

# 调用函数并解包返回值
result_sum, result_product = calculate(5, 3)

print("Sum:", result_sum)          # 输出: Sum: 8
print("Product:", result_product)   # 输出: Product: 15

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

防火墙基本原理入门篇,小白一看就懂!

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330&scene21#wechat_redirect 《网安面试指南》…

基于FPGA实现SD卡的数据读写(SD NAND FLASH)

文章目录 存储芯片 SD卡 FPGA实现SD NAND读写 设计思路 程序架构 代码实现 实验结果 存储芯片 目前市面上的存储芯片&#xff0c;大致可以将其分为3大类&#xff1a; EEPROM EEPROM (Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器…

package.json文件解析

【图书介绍】《Node.jsMongoDBVue.js全栈开发实战》-CSDN博客 《Node.jsMongoDBVue.js全栈开发实战&#xff08;Web前端技术丛书&#xff09;》(邹琼俊)【摘要 书评 试读】- 京东图书 (jd.com) 本节主要介绍package.json文件的作用及文件中各个选项的含义。 2.4.1 node_mod…

【一个简单的整数问题】

问题 TLE代码 #include <bits/stdc.h> using namespace std; const int N 1e510; int b[N]; void add(int l, int r, int d) {b[r1] - d;b[l] d; } int query(int x) {int retval 0;for(int i 1; i < x; i){retval b[i];}return retval; } int main() {int n, m…

【Kubernetes】持久卷声明 PVC

持久卷声明 PVC 1.持久卷和持久卷声明的区别2.在 Pod 中使用持久卷声明3.storageClass 详解 持久卷声明&#xff08;Persistent Volume Claim&#xff0c;PVC&#xff09;&#xff0c;是用户对 Kubernetes 存储资源的一种请求。 通过使用 持久卷声明&#xff08;PVC&#xff0…

yolo训练策略--使用 Python 和 OpenCV 进行图像亮度增强与批量文件复制

简介 在计算机视觉和深度学习项目中&#xff0c;数据增强是一种常用的技术&#xff0c;通过对原始图像进行多种变换&#xff0c;可以增加数据集的多样性&#xff0c;从而提高模型的泛化能力。本文将介绍如何使用 Python 和 OpenCV 实现图像的亮度增强&#xff0c;并将增强后的…

驱动(RK3588S)第二课时:引导程序和内核

目录 一、引导程序&#xff08;uboot&#xff09;1、uboot介绍2、A 系列通用芯片启动流程3、uboot的配置与使用 二、内核&#xff08;kernel&#xff09;1、内核的介绍2、内核的配置、裁剪和编译 三、其他知识点 一、引导程序&#xff08;uboot&#xff09; 1、uboot介绍 ubo…

PDF转CAD必备工具:四款转换神器对比推荐

随着数字办公的普及&#xff0c;我们常常需要处理不同格式的文档。在工程和设计领域&#xff0c;PDF转CAD的转换工具更是必备之选。本文将为大家介绍四款高效、便捷的PDF转CAD工具&#xff1a; 一、福昕PDF在线转换器 直通车&#xff08;粘贴到浏览器打开&#xff09;&#x…

软件测试 - 性能测试 (概念)(并发数、吞吐量、响应时间、TPS、QPS、基准测试、并发测试、负载测试、压力测试、稳定性测试)

一、性能测试 目标&#xff1a;能够对个人编写的项目进行接口的性能测试。 一般是功能测试完成之后&#xff0c;最后做性能测试。性能测试是一个很大的范围&#xff0c;在学习过程中很难直观感受到性能。 以购物软件为例&#xff1a; 1&#xff09;购物过程中⻚⾯突然⽆法打开…

PCB设计中” 铺铜的方式“导致电焊机设计失败

发现这个问题的背景 在看到网上视频设计一个小电池的点焊机很容易&#xff0c;在一些需要电力的小设计少不了点焊&#xff0c;就想尝试一下。当然其中遇到很多坑&#xff0c;后面会一起总结。这里遇到的一个小坑&#xff0c;但让人有点苦笑不得。 首先&#xff0c;点焊需要大…

【SQL】统一字符格式

目录 语法 需求 示例 分析 代码 语法 substring(column_name, start, length)用于从一个字符串中提取子字符串 column_name&#xff08;或任何字符串表达式&#xff09;&#xff1a;这是要从中提取子字符串的列名或字符串表达式。start&#xff1a;这是子字符串开始的位置…

用Python实现时间序列模型实战——Day 3: 时间序列数据预处理

一、学习内容 1. 时间序列的差分运算 差分运算&#xff1a; 差分运算是时间序列平稳化的一种方法&#xff0c;通过计算相邻时间点的差值来消除序列中的趋势和季节性成分。 一阶差分用于去除线性趋势&#xff0c;公式为&#xff1a; 其中&#xff1a; 是时间 的原始值&…

【网络安全】服务基础第一阶段——第三节:Windows系统管理基础----服务器远程管理与安全权限

服务器远程管理是一种技术&#xff0c;服务器远程管理是指通过远程连接来监控、配置和维护服务器的过程&#xff0c;而无需直接在物理服务器前操作。它允许IT管理员在不同的地点对服务器进行配置、监控和维护&#xff0c;无需物理上接触到服务器本身。这种能力对于管理分布在多…

LLaVA-MoLE:解决多模态大型语言模型指令微调中的数据冲突问题

人工智能咨询培训老师叶梓 转载标明出处 多模态大模型&#xff08;MLLMs&#xff09;通过指令微调&#xff08;instruction finetuning&#xff09;&#xff0c;能够执行各种任务&#xff0c;如理解图表、处理文档和回答基于图像的问题。但是&#xff0c;当从不同领域混合指令…

算法——K-means算法和算法改进

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 一、什么是K-means算法&#xff1f; K-means算法是一种无监督的聚类算法&#xff0c;用于将一组数据点分为K个簇&#xff08;cluster&#xff09;。其核心目标是将数据点划分到K个不同的簇中&…

CAS单点登录安装文档

CAS单点登录安装文档 目录 1、 下载CAS 2、 下载xmlsectool 3、 安装xmlsectool 4、 打包CAS 5、 部署CAS 6、 访问CAS 1.下载CAS 在CAS官方Github下载&#xff1a;https://codeload.github.com/apereo/cas/zip/v5.3.0 2.下载xmlsectool 在MVNREPOSITORY下载xm…

JavaWeb JavaScript ⑨ 正则表达式

生命的价值在于你能够镇静而又激动的欣赏这过程的美丽与悲壮 —— 24.8.31 一、正则表达式简介 正则表达式是描述字符模式的对象。正则表达式用简单的API对字符串模式匹配及检索替换&#xff0c;是对字符串执行模式匹配的强大工具。 1.语法 var pattnew RegExp(pattern,modi…

【软考】IO软件

目录 1. 说明2. 读硬盘文件3. IO 系统的层次结构与每层的主要功能4. 例题4.1 例题1 1. 说明 1.设备管理软件的设计水平决定了设备管理的效率。2.从事I0 设备管理软件的结构&#xff0c;其基本思想是分层构造&#xff0c;也就是说把设备管理软件组织成为一系列的层次。3.低层与…

【机器学习】任务二:波士顿房价的数据与鸢尾花数据分析及可视化

目录 1.实验知识准备 1.1 NumPy 1.2 Matplotlib 库 1.3 scikit-learn 库&#xff1a; 1.4 TensorFlow 1.5 Keras 2.波士顿房价的数据分析及可视化 2.1波士顿房价的数据分析 2.1.1 步骤一&#xff1a;导入所需的模块和包 2.1.2 步骤二&#xff1a;从 Keras 库中加载波…

Linux驱动开发基础(DS18B20温度模块)

所学来自百问网 目录 1.DS18B20 简介 2.硬件设计 3.软件设计 3.1 存储器介绍 3.2 通信时序 3.2.1 初始化时序 3.2.2 写时序 3.2.3 读时序 3.3 常用命令 4. 示例代码 4.1 驱动代码 4.2 应用代码 4.3 Makefile 4.4 实验效果 1.DS18B20 简介 DS18B20 温度传感器具…