2017-08-17 71 views
0

我想創建一個循環,如果滿足某個條件並創建一個對象,然後將它添加到列表中。但是,我不確定如何唯一命名這些對象,以便稍後可以使用/引用它們。例如這樣的事情:命名在一個循環中創建的對象

favNumbers = [] 

numbers = [6, 21, 5, 22] 

class favNumber(object): 
    def __init__(self, value): 
     self.value = value 

for i in numbers: 
    if i % 2 == 0: 
     unique_name_for_object = favNumber(i) 
     favNumbers.append(unique_name_for_object) 

我將如何給favNumber對象一個唯一的名稱?

我在想以某種方式將它們命名爲number1,number2,number3 ......但我認爲動態命名它們將是一個壞主意。

有沒有辦法做到這一點,而不動態命名它們?這似乎是不可能的,但我不確定我還能如何實現它。

+2

這不是_list_。兩者差別很大。 –

+1

列表中的索引唯一標識一個對象,爲什麼還需要一個唯一的名稱? –

+2

https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem爲什麼不試着闡述你想達到的目標,或許我們會找到一個更好的方法? –

回答

1

無需命名實例。試試這個

favNumbers = [] 
numbers = [6, 21, 5, 22] 


class favNumber(object): 
    def __init__(self, value): 
     self.value = value 


for i in numbers: 
    if i % 2 == 0: 
     favNumbers.append(favNumber(i)) 

現在,favNumbers是所有創建實例的列表。如果你想獲得value OT的每個實例,只需鍵入

for fn in favNumbers: 
    print(fn.value) 
+0

不妨使用列表組件。 – SwiftsNamesake

+1

@SwiftsNamesake Yup:'favNumbers = [我爲我在數字,如果我%2 == 0]'。 –

+1

@SwiftsNamesake你可以。或者你不能。兩者都很好。 –

0

如果你只是想生成一個列表,你可以使用一個list comprehension

favNumbers = [favNumber(i) for i in numbers if n % 2 == 0] 

最後一個表達式(if n % n == 0)作用作爲過濾器。要訪問這些值,可以使用索引(例如,對於第一個項目使用favNumbers[0]),或者像使用numbers一樣循環訪問列表。


正如有人在評論中指出,{}dict,不能附加。然而,您可以可以然而插入項給定一個鍵(這可能是整數i,雖然當鍵是連續的非負整數時使用列表通常更有意義)。

for i in numbers: 
    if n % 2 == 0: 
    favNumbers[i] = favNumber(i) 

它還可以藉助字典理解來完成:

favNumbers = { i : favNumber(i) for i in numbers if n % n == 0 } 

,如果你提供額外的方面,我會更新的答案。