在Python中採用列表動態建立變數名並呼叫

2021-10-01 12:53:46 字數 2758 閱讀 5882

在寫**過程中,也許你會碰見這樣的情況:需要多次建立一種類或者模型,如果採用手動輸入,設定不同的變數名(如val_1,val_2,val_3……),這個過程將會煩不勝煩,因此,動態建立變數名將會減少大量重複的工作,減輕你的負擔。此處以為例,展示如何通過列表的形式建立大量的變數名並呼叫。

實現乙個基數排序演算法,用於10進製的正整數從小到大的排序。

思路是保持10個佇列(佇列0、佇列1…佇列9、佇列main),開始,所有的數都在main佇列,沒有排序。

第一趟將所有的數根據其10進製個位(09),放入相應的佇列09,全放好後,按照fifo的順序,將每個佇列的數合併排到main佇列。

第二趟再從main佇列隊首取數,根據其十位的數值,放入相應佇列0~9,全放好後,仍然按照fifo的順序,將每個佇列的數合併排到main佇列。

第三趟放百位,再合併;第四趟放千位,再合併。

直到最多的位數放完,合併完,這樣main佇列裡就是排好序的數列了。

首先,此處建立乙個queue(佇列)類,類中包含了isempty,enqueue,dequeue,size四種方法。isempty判斷queue是否為空,enqueue在列表中左側插入乙個值,dequeue在刪除列表右側的值並返回,size返回長度。具體如下:

class

queue

:def

__init__

(self)

: self.items =

defisempty

(self)

:return self.items ==

defenqueue

(self, item)

: self.items.insert(

0, item)

defdequeue

(self)

:return self.items.pop(

)def

size

(self)

:return

len(self.items)

這裡a為我們動態建立的變數名,每乙個都是指向乙個類。

mylist =

eval

(input

("please enter a list(must be a list of number):\n"))

a =[0]

*10#此處建立乙個長度為10的列表

n =len

(str

(max

(mylist)))

creat_class =

locals()

for ii in

range(10

):#此處開始動態建立變數名

creat_class[

'queue_'

+str

(ii)

]= queue(

) a[ii]

= creat_class[

'queue_'

+str

(ii)

]mainqueue = queue(

)

通過以上建立的變數,可以通過對變數進行呼叫類中的isempty,enqueue,dequeue,size四種方法。

for ii in

range

(len

(mylist)):

mainqueue.enqueue(mylist[ii]

)for i0 in

range

(n):

while mainqueue.isempty()is

false

: main_element = mainqueue.dequeue(

) temp =

int(main_element/(10

**i0)%10

)for k0 in

range(10

):if temp is k0:

a[k0]

.enqueue(main_element)

# 通過變數呼叫enqueue方法。

for j1 in

range(10

):while a[j1]

.isempty()is

false

:# 通過變數呼叫isempty方法。

other_element = a[j1]

.dequeue(

)# 通過變數呼叫dequeue方法。

mainqueue.enqueue(other_element)

output =

while mainqueue.isempty()is

false

: main_element2 = mainqueue.dequeue(

)print

(output)

我們輸入乙個亂序的數字列表,得到重新排序的列表,下面為輸入的亂序列表:

[19,

97,8,

15,96,

9,21,

0]

**得到的輸出結果如下:

[0,

8,9,

15,19,

21,96,

97]

perfect,怎麼樣,是不是很方便呢?

如有不足,請多多指教。

python 動態列表 python 遍歷動態列表

我要從一組序列 字串 中生成乙個子集字典,其中每個序列都代表乙個鍵,並且值應該是在 匹配 例如1 位置最多匹配的所有序列,都與原始序列 鍵 以及當時子集中的所有值條目。例如,考慮由 a c g 和 t 組成的所有長度為3的序列,其中乙個鍵值對應該是 或可以是,因為有更多可能的方法來選擇一套 這是我想...

python動態建立執行緒 在python中建立執行緒

我有乙個指令碼,我想要乙個功能與另乙個同時執行。我看過的示例 import threading def mythread threading.thread doing something.def mythread2 threading.thread doing something.mythread ...

python的列表操作 在Python中列表的操作

列表可以做什麼?假設你要建立乙個基於 go fish 的遊戲。如果你不知道 go fish 是什麼,就去網上查一下。要實現這個遊戲,你需要有乙個辦法,把 一摞紙牌 這一概念寫到python程式中。然後你要寫 python 去操作這紙牌,讓玩家覺得他是真的在玩紙牌。這個 一摞紙牌 的結構,被程式設計師...