我正在处理两个元组列表并推断结果。
例如:
A = [('Hi','NNG'),('Good','VV'),...n]
B = [('Happy','VA',1.0),('Hi','NNG',0.5)...n]
首先,我想匹配A和B之间的单词。 比如'Hi'='Happy'或'Hi'='Hi' 其次,如果它们相同并匹配,则匹配单词类。 'NNG'='NNG'或'NNG'='VV' 第三,如果所有这些步骤都匹配,那么提取数字! 比如A = [('Hi','NNG')]和B =('Hi','NNG',0.5) 提取0.5
最后,我想将所有数字与提取相乘。 每个A,B中有超过1,000个元组。所以'for'循环对于找到这个过程是必要的。
我怎样才能在Python中执行此操作?
答案 0 :(得分:1)
尝试这样的事情:
A = [('Hi', 'NNG'), ('Good', 'VV')]
B = [('Happy', 'VA', 1.0), ('Hi', 'NNG', 0.5)]
print(', '.join(repr(j[2]) for i in A for j in B if i[0] == j[0] and i[1] == j[1]))
# 0.5
答案 1 :(得分:0)
一种方法是使用set
和(可选)字典。此方法的好处是您还可以保留关键数据以了解值的来源。
A = [('Hi','NNG'),('Good','VV')]
B = [('Happy','VA',1.0),('Hi','NNG',0.5)]
A_set = set(A)
res = {(i[0], i[1]): i[2] for i in B if (i[0], i[1]) in A_set}
res = list(res.values())
# [0.5]
要将列表中的所有结果相乘,请参阅How can I multiply all items in a list together with Python?
<强>解释强>
for i in B
字典理解。这样做会返回一个结果元组,迭代遍历B
的每个元素。i[0] = 'Happy', i[1] = 'VA', i[2] = 1.0
。(i[0], i[1]) in A_set
进行过滤。答案 2 :(得分:0)
Python是如此之高,以至于感觉像英语。因此,可以用最少的经验轻松编写以下工作解决方案:
A = [('Hi','NNG'),('Good','VV')]
B = [('Happy','VA',1.0),('Hi','NNG',0.5)]
tot = 1
for ia in A:
for ib in B:
if ia == ib[:2]:
tot *= ib[2]
break # remove this line if multiple successful checks are possible
print(tot) # -> 0.5
答案 3 :(得分:-1)
zip()
是你的朋友:
for tupA,tupB in zip(A,B):
if tupA[:2] == tupB[:2] : print(tupB[2])
使用花式pythonic列表理解:
results = [tubB[2] for tubA,tubB in zip(A,B) if tubA[:2] == tubB[:2] ]
但是......为什么我有一种偷偷摸摸的感觉,这不是你想要做的?