如何在Python中将元组列表更改为一组?

时间:2014-10-12 16:14:13

标签: python list tuples

我在Python中创建了一个函数,它返回了投掷2个骰子的所有可能结果的列表。 元组列表:[(1,1),(1,2),...,(6,6)]。

然后我编写了一个函数来查找所有元素,其中两个值的总和甚至是(a),另一个函数用于查找值的乘积甚至(b)中即可。

现在我正在尝试编写一个函数来查找仅在(a)中的元素和另一个函数来查找值的乘积在哪两个(a)和(b)

def dice_outcomes():
    outcomes=[]
    for i in range (1,7):
        for j in range (1,7):
            outcomes.append((i,j))
    r = outcomes
    return(r)

def filter_sumiseven(tuple):
    elem1 = tuple[0]
    elem2 = tuple[1]
    return (elem1 + elem2)%2 == 0

def filter_productiseven(tuple):
    elem1 = tuple[0]
    elem2 = tuple[1]
    return (elem1 * elem2)%2 == 0

我尝试将我的列表(见下文)转换为一组,但它仍然不起作用。 我首先尝试使用变量a和b来返回我的第2和第3个函数,但这不起作用。 任何人都可以解释如何获得正确的输出?

 def only_as(a):
     set_a = set(a)
     set_b = set(b)
     if set_a not in set_b: 
         return set_a 
     else: 
         #DO NOT ADD


 def a_and_b(a, b):
     set_a = set(a)
     set_b = set(b)
     if set_a in set_b:
         #print
     if set_b in set_a :
         #print 

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您可以将代码简化为:

from itertools import product

dice_outcomes = list(product(range(1, 7), repeat=2))
is_even = {el for el in dice_outcomes if sum(el) % 2 == 0}
product_is_even = {(fst, snd) for fst, snd in dice_outcomes if fst*snd % 2 == 0}
just_even = is_even - product_is_even
even_and_product = is_even & product_is_even