Zero-Py系列:Python列表概览(超详细+全面)

Zero-Py系列:Python列表概览(超详细+全面)🎉🎉🎉



对元素操作 ✨✨✨

1.基本操作

  • 打印列表
  • 访问元素
  • 求元素出现次数
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2]
# 打印列表
print(lst)          # 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2]

# 从后访问元素
print(lst[-1])      # 输出:2
print(lst[-2])      # 输出:1

# 求元素出现次数
print(lst.count(1))	# 输出: 2
  • 长度,最大值,最小值,总和
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(len(lst))     # 9
print(min(lst))     # 1
print(max(lst))     # 9
print(sum(lst))     # 45

2.添加元素

  • 在列表末尾添加元素
list.append('插入元素')
  • 在列表中插入元素
lst = ['honda', 'yamaha', 'suzuki']
lst.insert(0, 'a')
print(lst)      # ['a', 'honda', 'yamaha', 'suzuki']
lst.insert(2, 'b')
print(lst)      # ['a', 'honda', 'b', 'yamaha', 'suzuki']

3.删除元素

🚨注意:如果要从列表中删除元素,且不再使用它,用 del语句 如果删除元素后继续使用,用 pop() 方法

  • del 语句删除
lst = ['a', 'ab', 'abc']
# 不能再次使用该元素
del lst[0]      # 输出:['ab', 'abc']
  • pop() 方法删除
lst = ['a', 'ab', 'abc', 'd', 'e', 'f', 'j']
# 可以直接使用
lst.pop()       # ['a', 'ab', 'abc', 'd', 'e', 'f']

# 删除列表末尾元素,并且可以继续使用该元素
popped_ele = lst.pop()     # ['a', 'ab', 'abc', 'd', 'e']  popped_ele = 'd'

# 删除列表中任意位置元素,且可继续使用
ele = lst.pop(1)      # ['a', 'abc', 'd', 'e']  ele = 'ab'
  • remove() 方法删除
    🚨注意:若要通过遍历列表 使用 remove() 删除值,需要在后面加上[::-1],否则不能干净的删除列表中的元素😭😭😭
lst = ['a', 'b', 'c', 'd', 'e', 'f', 'j', 'a']
# remove() 可根据值来删除元素
ele = lst.remove('a')     # ['b', 'c', 'd', 'e', 'f', 'j', 'a']

# 但是只能删除第一个指定的值,可以使用while循环完全删除
while 'a' in lst:
    lst.remove('a')
print(lst)      # ['b', 'c', 'd', 'e', 'f', 'j']

# 额外说明,若要remove() 删除值,需要在后面加上[::-1]
ls_one = [1, 3, 3, 4, 5, 6, 7, 3, 9, 10]
ls_two = [1, 3, 3, 4, 5, 6, 7, 3, 9, 10]
for val in ls_one:
    if val % 2 != 0:
        ls_one.remove(val)
print(ls_one)       # [3, 4, 6, 3, 10]

for val in ls_two[::-1]:
    if val % 2 != 0:
        ls_two.remove(val)
print(ls_two)       # [4, 6, 10]

4.元素排序

  • 使用 sort() 方法永久排序
# 永久排序
lst = ['bmw', 'Bmw', 'audi', 'toyota', 'subaru']
lst.sort()              # ['Bmw', 'audi', 'bmw', 'subaru', 'toyota']
lst.sort(reverse=True)  # ['toyota', 'subaru', 'bmw', 'audi', 'Bmw']
  • 使用 sorted() 函数临时排序
# 临时排序
lst = ['bmw', 'Bmw', 'audi', 'toyota', 'subaru']
# 正序排列
lst_reverse = sorted(lst)
print(lst_reverse)  # ['Bmw', 'audi', 'bmw', 'subaru', 'toyota']
print(lst)          # ['bmw', 'Bmw', 'audi', 'toyota', 'subaru']

# 降序排列
print(sorted(lst, reverse=True))    # ['toyota', 'subaru', 'bmw', 'audi', 'Bmw']
  • 反向打印列表
    注意: reverse() 是永久的, 但可以通过使用两次来返回原来的列表
lst = ['bmw', 'Bmw', 'audi', 'toyota', 'subaru']
# 使用reverse() 方法反向打印列表
# 注意:reverse() 不是按照降序排列列表,而是反转列表
lst.reverse()       # ['subaru', 'toyota', 'audi', 'Bmw', 'bmw']

对列表操作 ✨✨✨

1.遍历列表

🚨注意:print方法内有end参数,这个参数规定print函数输出的结尾字符,默认是回车符。通过修改其值可以实现一行且以 '修改的参数值'为间隔输出

我们可以指定这个结尾符为空格,从而实现整行输出`

lsts = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 输出:1 2 3 4 5 6 7 8 9
for lst in lsts:
    print(lst, end=' ')

2.巧用range() 函数

# range() 基本用法
for val in range(11):           # 0 1 2 3 4 5 6 7 8 9 10
    print(val, end=' ')
for val in range(1, 11, 2):     # 1 3 5 7 9 
    print(val, end=' ')
    
# 使用 range() 创建数值列表
lst = list(range(1, 6))     # [1, 2, 3, 4, 5]

3.列表推导式 📌

使用更简短的代码实现列表的创建
实现规则:将 for 循环和创建新元素的代码合并成一行,并自动追加新元素

# 例如:创建平方数列表
squares = [value ** 2 for value in range(1, 11)]
print(squares)      # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

4.切片

切片 => 可以让我们处理列表的部分元素

# 创建切片
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
lst_one = lst[1:3]      # [2, 3]
lst_two = lst[:3]       # [1, 2, 3]
lst_three = lst[-2:]    # [8, 9]

# 遍历切片
for value in lst[:3]:
    print(value, end=' ')    # 1 2 3

5.复制列表 📌📌📌

反例

  • 反例 => 直接使用 = 复制 ❌❌❌
    🚨这里将 fruits 赋给 lst_new,而不是将 fruits副本 赋给 lst_new, 这种语法是将新变量 lst_new 关联到 已与 fruits 相关联的列表,实际上两个变量指向同一个列表
fruits = ['apple', 'banana', 'strawberry', 'lemon']
lst_new = fruits
fruits.append('a')
lst_new.append('b')
print(fruits)          # ['apple', 'banana', 'strawberry', 'lemon', 'a', 'b']
print(lst_new)         # ['apple', 'banana', 'strawberry', 'lemon', 'a', 'b']

浅拷贝

  • 1.copy() 方法
    对于List来说,其第一层,是实现了深拷贝,但对于其内嵌套的List,仍然是浅拷贝。
lst = [1, [2, 3], 4, 5]
lst_new = lst.copy()
print(lst_new)          # [1, [2, 3], 4, 5]
lst_new[0] = 10
lst_new[1][0] = 10
print(lst)              # [1, [10, 3], 4, 5]
print(lst_new)          # [10, [10, 3], 4, 5]
  • 2.使用列表生成式
    只对第一层深拷贝
lst = [1, [2, 3], 4, 5]
lst_new = [i for i in lst]
print(lst_new)          # [1, [2, 3], 4, 5]
lst_new[0] = 10
lst_new[1][0] = 10
print(lst)              # [1, [10, 3], 4, 5]
print(lst_new)          # [10, [10, 3], 4, 5]
  • 3.for循环遍历
    同上,只对第一层深拷贝
lst = [1, [2, 3], 4, 5]
lst_new = []
for i in lst:
    lst_new.append(i)
    
print(lst_new)          # [1, [2, 3], 4, 5]
lst_new[0] = 10
lst_new[1][0] = 10
print(lst)              # [1, [10, 3], 4, 5]
print(lst_new)          # [10, [10, 3], 4, 5]
  • 4.使用切片
    同上,只对第一层深拷贝 (部分位置可参考 切片 部分)
    ps.省略起始索引和终止索引( [:] ), 可创建一个包含整个列表的切片
lst = [1, [2, 3], 4, 5]
lst_new = lst[:]

print(lst_new)          # [1, [2, 3], 4, 5]
lst_new[0] = 10
lst_new[1][0] = 10
print(lst)              # [1, [10, 3], 4, 5]
print(lst_new)          # [10, [10, 3], 4, 5]

深拷贝

  • 用copy.deepcopy() 方法
    🚨注意:需要先导入 copy 模块
    copy.deepcopy() 方法 ,无论多少层,无论怎样的形式,得到的新列表都是和原来无关的 最安全有效的方法
import copy
lst = [1, [2, 3], 4, 5]
lst_new = copy.deepcopy(lst)

print(lst_new)          # [1, [2, 3], 4, 5]
lst_new[0] = 10
lst_new[1][0] = 10
print(lst)              # [1, [2, 3], 4, 5]
print(lst_new)          # [10, [10, 3], 4, 5]

元组 ✨✨✨

不可变的列表称为 元组

1.修改元组变量

demo_tuple = (1, 2, 3)
print(demo_tuple)       # (1, 2, 3)

demo_tuple = (1, 4, 5)
print(demo_tuple)       # (1, 4, 5)

最后

🌈Zero-Py系列(Python基础知识部分)创建是想要对Python基础语法进行一个全面的总结,便于大家系统的查找相关知识点和一些技巧,由于想要尽量全面展示知识点,所以分为几个模块来阐述

如果想要对总体知识进行检索,可以跳转链接: Python基本知识点以及一些处理技巧概览(📌总体大纲–可自由检索)进行查看

如果有什么不足或者疑问,欢迎留言讨论🥰🥰🥰

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
这些警告信息表明在模型的训练过程中,一些模块被视为无操作(zero-op)。这通常是由于模型的某些部分没有被正确地使用或设置导致的。以下是对每个警告的简要解释: - Dropout模块:Dropout是一种常用的正则化技术,但在推理阶段通常不需要使用。如果在推理阶段使用了Dropout模块,它会被视为无操作。 - PositionalEncoding模块:Transformer模型使用Positional Encoding来编码输入序列的位置信息。但在某些情况下,如果没有正确地设置Positional Encoding模块,它可能被视为无操作。 - NonDynamicallyQuantizableLinear模块:这个警告通常出现在使用量化技术对模型进行压缩时。NonDynamicallyQuantizableLinear是指无法动态量化的线性层,可能会被视为无操作。 - TransformerEncoderLayer模块:TransformerEncoderLayer是Transformer模型中的一个关键组件,但在某些情况下,如果没有正确地使用或配置该模块,它可能被视为无操作。 - TransformerEncoder模块:TransformerEncoder是由多个TransformerEncoderLayer组成的编码器。类似于上述警告,如果没有正确地配置该模块,它可能被视为无操作。 - PredictionTransformer模块:这个警告出现在CSDN开发的具体模型中,可能是该模型使用了一些自定义的组件或层,但没有正确地使用或配置导致被视为无操作。 要解决这些警告,你需要检查相应的模块的使用和配置,确保其正常运行,并根据需要进行调整和修复。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值