Python小記錄

用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=",")

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章