首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写Python程序,该程序以两个列表作为输入,如果至少有3个公共元素,则返回True

编写Python程序,该程序以两个列表作为输入,如果至少有3个公共元素,则返回True
EN

Stack Overflow用户
提问于 2022-08-12 13:04:37
回答 3查看 425关注 0票数 0

我无法设置秘密列表,也无法比较列表中的三个项目。

代码语言:javascript
复制
    a_set = set(a)
    b_set = set(b)
    if len(a_set.intersection(b_set)) > 3:
        return True
    return False
a = [10,20,'Python', 10.20, 10+20j, [10,20,30], (10,20,30)]
b = [(10,20,30),1,20+3j,100.2, 10+20j, [10,20,30],'Python']
print(common_ele(a, b))
EN

回答 3

Stack Overflow用户

发布于 2022-08-12 13:27:41

您可以定义一个帮助函数,用于将列表转换为集合:

代码语言:javascript
复制
import collections
from typing import Union


def make_into_set(xs: list[Union[int, str, float, complex, list[int], tuple[int, ...]]]) \
       -> set[Union[int, str, float, complex, tuple[int, ...]]]:
    return {x if isinstance(x, collections.abc.Hashable) else str(x) for x in xs}


def common_ele(a: list[Union[int, str, float, complex, list[int], tuple[int, ...]]],
               b: list[Union[int, str, float, complex, list[int], tuple[int, ...]]]) -> bool:
    a_set = make_into_set(a)
    b_set = make_into_set(b)
    return len(a_set.intersection(b_set)) > 3


a = [10, 20, 'Python', 10.20, 10+20j, [10, 20, 30], (10, 20, 30)]
b = [(10, 20, 30), 1, 20+3j, 100.2, 10+20j, [10, 20, 30], 'Python']
print(common_ele(a, b))

输出:

代码语言:javascript
复制
True
票数 1
EN

Stack Overflow用户

发布于 2022-08-12 13:43:13

代码语言:javascript
复制
def commonElement(a: list, b: list):
    common = 0
    for i in a:
        if i in b:
            common += 1
    if common > 3:
        return True

a = [10,20,'Python', 10.20, 10+20j, [10,20,30], (10,20,30)]
b = [(10,20,30),1,20+3j,100.2, 10+20j, [10,20,30],'Python']
print(commonElement(a, b))
代码语言:javascript
复制
True

共同要素是:

代码语言:javascript
复制
Python
(10+20j)
[10, 20, 30]
(10, 20, 30)
票数 1
EN

Stack Overflow用户

发布于 2022-08-12 14:37:54

首先,对于list1的每个元素,我们将检查是否有任何list2元素与其相同,如果是相同的,我们将增加相同元素的数量,相同的+= 1,在检查所有需要检查的元素之后,这些元素都大于3。

代码语言:javascript
复制
def check(list1, list2):
    same = 0  # number of the same elemetns
    for element1 in list1:
        for element2 in list2:
            if element1 == element2:  # check all of the elements
                same += 1
    return True if same>=3 else False

返回代码(最后一行)与以下代码相同:

代码语言:javascript
复制
if same >=3:
    return True
else:
    return False

或者您可以这样使用:首先,对于所有的list1元素,检查它是否在列表2中,如果它们在list2中,它将把1附加到列表的其他2中,然后,我们将计算有多少个1,如果有3个或更多的返回,True else返回False。

代码语言:javascript
复制
def checkSame(list1, list2):
    same = [(1 if i in list2 else 0) for i in list1].count(1)
    return True if same >= 3 else False
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73334640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档