2016-12-02 96 views
2

我要比較的元組元素的兩個列表,並結合元素本身的一些數學計算的兩個列表。比較Python的元組元素

更確切地說,我有以下列表中,list_1的每一個元組代表一個字符,它的頻到文本前。 ("a" : "10)list_2的每一個元組表示字符的二元及其頻到同一文本前。 ("a", "b" , "2")

list_1=[("a","10"), ("b","5"), ("c","3"),("d","1")] 
list_2= [("a", "b", "4"), ("b","c","1")] 

我需要遍歷兩個列表,並在案件存在的list_2人物和list_1的caracters之間的比賽,我的目標是做以下analisys:

x= ("a","10")*("b","5")/("a","b","4")= 10*5/4 

我希望我是在問題的解釋清楚......

+1

好吧,既然你似乎知道你想要做的,我建議什麼你寫一些代碼? – user3012759

回答

2

試試這個,

list_1=[("a","10"), ("b","5"), ("c","3"),("d","1")] 
list_2= [("a", "b", "4"), ("b","c","1")] 

# Convert list_1 into a dict 
d = {t[0]:int(t[1]) for t in list_1} 

result = [d.get(t[0], 0)*d.get(t[1], 0)*1.0/int(t[2]) for t in list_2] 

print(result) 
#[12.5, 15.0] 
+0

非常感謝sparkandshine!你的回答很好!我只有一個小問題。如果我想要這樣的結果,我必須做的事:ab = 12.5,bc = 15.0? – CosimoCD

+0

試試這個,'對於t,zip的值(list_2,result): \t print(''。join([t [0],t [1],'=',str(value)]))' – SparkAndShine

+1

非常感謝!你對python非常好! – CosimoCD

1

@ sparkandshine的是更好的解決方案,但爲了清楚起見,這裏是爲這些新的Python和不熟悉推導一個詳細的方法:

def compute(bigrams, table): 
    """Yield a resultant operation for each bigram.""" 
    for bigram in bigrams: 
     # Get values and convert strings 
     x = int(table[bigram[0]]) 
     y = int(table[bigram[1]]) 
     z = int(bigram[2]) 

     operation = (x * y)/z 
     yield operation 


list(compute(list_2, dict(list_1))) 
# [12.5, 15.0]