在python中同时对2个元素使用FOR语句

在python中同时对2个元素使用FOR语句,python,Python,我有下面的变量列表和一个主变量 a=(1,5,7) b=(1,3,5) c=(2,2,2) d=(5,2,8) e=(5,5,8) mastervariable=(3,2,5) 我试图检查主变量中是否存在每个变量中的2个元素,这样上面显示的B(3,5)和D(5,2)是至少有2个元素与主变量匹配的元素。还要注意,使用集合会导致C显示为MatchSign,但我不想计算C,因为C中只有“一个”元素在主变量中(即2在主变量中只显示一次,而不是两次) 我目前的工作效率非常低: if current_var

我有下面的变量列表和一个主变量

a=(1,5,7)

b=(1,3,5)

c=(2,2,2)

d=(5,2,8)

e=(5,5,8)

mastervariable=(3,2,5)

我试图检查主变量中是否存在每个变量中的2个元素,这样上面显示的B(3,5)和D(5,2)是至少有2个元素与主变量匹配的元素。还要注意,使用集合会导致C显示为MatchSign,但我不想计算C,因为C中只有“一个”元素在主变量中(即2在主变量中只显示一次,而不是两次)

我目前的工作效率非常低:

if current_variable[0]==mastervariable[0]:
            if current_variable[1] = mastervariable[1]:
                        True                        
            elif current_variable[2] = mastervariable[1]:
                        True       

  #### I don't use OR here because I need to know which variables match.

elif current_variable[1] == mastervariable[0]:   ##<-- I'm now checking 2nd element
            etc. etc.
有没有一种方法可以使用2 FOR语句,允许我一次检查列表中的2个元素,同时跳过已经使用过的任何元素?或者,你能建议一个有效的方法来做我正在尝试的事情吗


编辑:主变量中可以有重复项

对于电视台来说似乎是个不错的工作。编辑:集合不适用,因为主变量可能包含重复项。这是一个使用计数器的版本

>>> a = (1,5,7)
>>> 
>>> b = (1,3,5)
>>> 
>>> c = (2,2,2)
>>> 
>>> d = (5,2,8)
>>> 
>>> e = (5,5,8)
>>> D=dict(a=a, b=b, c=c, d=d, e=e)
>>> 
>>> from collections import Counter
>>> mastervariable = (5,5,3)
>>> mvc = Counter(mastervariable)
>>> for k,v in D.items():
...  vc = Counter(v)
...  if sum(min(count, vc[item]) for item, count in mvc.items())==2:
...   print k
... 
b
e

对于可以复制匹配元素以使
set
中断的情况,将其用作多集-可通过以下方式找到
a
master
之间的重复项:

count_a = Counter(a)
count_master = Counter(master)
count_both = count_a + count_master
dups = Counter({e : min((count_a[e], count_master[e])) for e in count_a if count_both[e] > count_a[e]})
逻辑相当直观:如果在
a
master
的组合计数中有更多的项目,那么它是重复的,并且多重性是无论
a
master
中哪个项目的数量较少

它给出了所有重复项的计数器,其中计数是它们的重数。如果要将其作为元组返回,可以执行
tuple(dups.elements())


集合的问题是,它们会将变量C显示为true,但变量C有2,2,2,而主变量有3,2,5,这意味着两个元素不匹配如果主变量可以有重复项,则集合可能仍然有问题。无需使用
.get
和计数器-
计数器()['a']
->0.mastervariable可以有重复项吗?@gnibler是的,mastervariable可以有重复项您是否担心您的方法会花费很多时间,或者它会花费很多代码?我担心它会花费很多代码,因为我想我最终需要编写类似的函数,如果您注意到,提供的解决方案允许我测试3以上的变量elements@Ivc这看起来很棒。谢谢也谢谢大家,很抱歉我对我的问题做了糟糕的解释
count_a = Counter(a)
count_master = Counter(master)
count_both = count_a + count_master
dups = Counter({e : min((count_a[e], count_master[e])) for e in count_a if count_both[e] > count_a[e]})
>>> a
(2, 2, 2)
>>> master
(1, 2, 2)
>>> dups = Counter({e : min((count_a[e], count_master[e])) for e in count_a if count_both[e] > count_a[e]})
>>> tuple(dups.elements())
(2, 2)