Python小记录

博主分享了一年多使用Python编程中遇到的常见错误,包括删除列表元素时的遍历问题、修改列表元素的正确方式、赋值与复制的区别、函数传参中的可变对象特性、random.randint()的用法、整数除法、namedtuple的使用、exec命令的执行上下文以及如何保存list数据为csv文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用Python也一年多了,但是发现自己依然总是在一些很简单但是容易出错的地方反复出错和纠结,耽误时间,于是决定把自己遇到的问题总结一下~
1、删除列表元素
这个应该是很常见的问题了

这样写的问题在于当一边遍历一边删除时,当删除一个元素时(比如1),下一次遍历的元素不再是2而是3。并没有对所有元素进行遍历。

这样写的问题在于,一开始a的元素个数为7,随着遍历过程中的元素删除,总的元素个数减少,而i依然会从0遍历到6,这就导致了index out of range error。
一种正确的写法:反向遍历

2、修改列表元素

!好几次没注意在这个地方出了问题。注意在循环中需要修改变量时,需要采用for in range()的形式,直接for x in a是无法修改a中的元素的。

3、赋值与复制


4、函数传参

写了这么久代码刚刚才知道传入list作为函数的参数,其原本的值是会被函数内相应的操作改变的。汗颜
原来python里有可变对象和不可变对象之分。只有传入的是不可变对象时,值才不发生改变,若是可变对象,充当函数参数时要注意了。
不可变对象:Number ,String , Tuple,bool
可变对象: List , Set , Dictionary是可以改变内部的元素

5、random.randint()
random.randint(a,b)随机返回[a,b]内的整数

6、整数除法

7、namedtuple
namedtuple作为一个很有用的工具,能够用来创建类似于元祖的数据类型,除了能够用索引来访问数据,能够迭代,更能够方便的通过属性名来访问数据。
需要注意的namedtuple拥有和tuple一样的性质:不能修改,可以通过_replace()来实现修改数据。

8、exec

exec(source, globals=None, locals=None, /)

在全局变量和局部变量的上下文下执行source对应的字符串
最近的遇到的一个bug,折腾了好久:
exec命令在主函数下执行没有问题,但是在class类中,使用exec无法直接使用变量。
一种解决方法如下:

# encoding: utf-8

class tess(object):
    def __init__(self):
        self.__globals__ = {}
        self.__locals__ = self.__globals__

    def ex(self):
        sa = 'a=1'
        exec(sa, self.__globals__, self.__locals__)
        print(self.__globals__['a'])

s = tess()
s.ex()

9、保存list
训练模型时有时候需要保存各个epoch的损失,这里记录一下将list形式的loss保存为csv的方法

import numpy as np
train_a_loss = [0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3]
eval_a_loss = [0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3]
train_b_loss = [0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3]
eval_b_loss = [0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3]
data_array = np.array([train_a_loss, eval_a_loss, train_b_loss, eval_b_loss])
np.savetxt('loss.csv', data_array, delimiter=",")
data = np.loadtxt('loss.csv', delimiter=",")

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值