2013-01-16 40 views
0

我有一些變量,我需要比較他們每個人,並填寫根據比較三個列表,如果var == 1添加1lista_a,如果var == 2添加1lista_b。 ..,如:我如何填充列表諸多變數蟒蛇

inx0=2 inx1=1 inx2=1 inx3=1 inx4=4 inx5=3 inx6=1 inx7=1 inx8=3 inx9=1 
inx10=2 inx11=1 inx12=1 inx13=1 inx14=4 inx15=3 inx16=1 inx17=1 inx18=3 inx19=1 
inx20=2 inx21=1 inx22=1 inx23=1 inx24=2 inx25=3 inx26=1 inx27=1 inx28=3 inx29=1 

lista_a=[] 
lista_b=[] 
lista_c=[] 

#this example is the comparison for the first variable inx0 
#and the same for inx1, inx2, etc... 
for k in range(1,30): 
    if inx0==1: 
     lista_a.append(1) 
    elif inx0==2: 
     lista_b.append(1) 
    elif inx0==3: 
     lista_c.append(1) 

我需要得到:

#lista_a = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] 
#lista_b = [1,1,1] 
#lista_c = [1] 
+8

您不應該創建所有這些變量開始。你幾乎可以肯定需要一個字典或一個列表。 – geoffspear

+0

請注意,您示例中的前三行將導致語法錯誤;你不能簡單地把作業放在這樣的一條線上。你必須把它們放在不同的行上,或者在它們之間使用(顫抖)分號。 –

+1

(用'1'列表而不是'int'列出的數據幾乎肯定是一個壞主意) – geoffspear

回答

3

你INX *變量應該差不多certinaly是一個列表,開始用:

inx = [2,1,1,1,4,3,1,1,3,1,2,1,1,1,4,3,1,1,3,1,2,1,1,1,2,3,1,1,3,1] 

然後,找出有多少2的有:

inx.count(2) 

如果你一定要,你可以建立一個新的列表出來的是:

list_a = [1]*inx.count(1) 
list_b = [1]*inx.count(2) 
list_c = [1]*inx.count(3) 

,但它似乎愚蠢的保留一份清單。真的,你需要保留的唯一數據是一個整數(計數),那麼爲什麼還要攜帶一個列表呢?


另一種方法得到的人的名單是使用一個defaultdict:

from collections import defaultdict 
d = defaultdict(list) 
for item in inx: 
    d[item].append(1) 

在這種情況下,要作爲list_a什麼可以由d[1]訪問,list_b可以作爲訪問d[2]


或者,如在註釋中規定,你可以得到使用計數10:

from collections import Counter #python2.7+ 
counts = Counter(inx) 
list_a = [1]*counts[1] 
list_b = [1]*counts[2] 
... 
+1

或使用'collections.Counter'。 –

+0

@AshwiniChaudhary - 是的,這將工作得到python2.7 +的計數。 – mgilson

+0

是的......變量是來自數據庫的統計數據......謝謝,您的解決方案更有用! – LuParra