2016-12-02 261 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]