将列表中的值偶数放入集合中

Even values from lists into a set

这是给定的作业+代码:

Write a function even_value_set(list1, list2, list3), which receives three lists containing integer items as arguments. The function creates and returns a set that contains all items with even value from all three lists.

def test():
    l = [[],[],[]]
    
    for i in range(3):
        for j in range(random.randint(7,14)):
            l[i].append(random.randint(1,35))
        print ("List" + str(i + 1) +":",l[i])
        
    print ("")
    s = even_value_set(l[0],l[1],l[2])
    print ("Return type:", str(type(s)).replace("<","").replace(">",""))
    print ("Set with even values only:", end = "")
    print (set(sorted(list(s))))
    
test()

import random

我尝试使用 .union() 并将列表添加到另一个列表中,然后再将它们变成集合,但没有成功。

您可以使用 + 来合并列表,例如 list1 + list2。然后遍历结果列表检查数字是否为偶数并添加到另一个列表中。

def even_value_set(list):
  result = set()
  for val in list:
    if val%2 == 0:
      result.add(val)
  return result

def test():
l = [[],[],[]]

for i in range(3):
    for j in range(random.randint(7,14)):
        l[i].append(random.randint(1,35))
    print ("List" + str(i + 1) +":",l[i])
    
print ("")
uni = l[0] + l[1] + l[2]
s = even_value_set(uni)
print ("Return type:", str(type(s)).replace("<","").replace(">",""))
print ("Set with even values only:", end = "")
print (set(sorted(list(s))))

test()

import random

是你想要的吗?我认为你的问题令人困惑。

您可以使用 + 操作合并列表(包含重复项)。

union_list = list1 + list2 + list3

如果您只想要唯一值,您可以在此列表中调用 set。

unique_set = set(union_list)

现在您可以创建一个新的空集并迭代 unqiue_set 并添加所有偶数值:

solution = set()
for v in unique_set:
    if v%2==0:
        solution.add(v)

您可以用一种简单的 Pythonic 方式来做到这一点。这个函数可以使用 comprehension

写成一个简单的单行代码
def even_value_set(list1, list2, list3):
    return set([num for num in list1+list2+list3 if num % 2 == 0])

基本上,我们在这里所做的是连接所有列表,过滤偶数,然后将其制成一个集合。

def even_value_set(*lsts):
    s = set()
    for lst in lsts:
        s |= {x for x in lst if x % 2 == 0}
    return s

您也可以使用加星标

def even_value_set(*lsts):
    return set().union(*[{x for x in lst if x % 2 == 0} for lst in lsts])

和连接解决方​​案(更多内存)。 集合理解比 set()

更有效
def even_value_set(l1, l2, l3):
    return {x for x in l1+l2+l3 if x % 2 == 0}