Python:数学集和元组

Python:数学集和元组,python,list,math,set,tuples,Python,List,Math,Set,Tuples,我在python程序中实现了一个方法,用于检查数学函数是否有效 我的计划中的一个例子是: ['set',['tuple',1,2],['tuple',3,4]] 等于,{(1,2),(3,4)} 要使检查返回True,集合中的所有元组必须具有唯一的数字作为其最左边的值。所以函数{(1,2),(1,4)}将返回false 目前,我已经为一个具有一个元组的集合实现了这一点,这将不需要检查元组中的唯一值: if "set" in argument: print("Found a set")

我在python程序中实现了一个方法,用于检查数学函数是否有效

我的计划中的一个例子是:

['set',['tuple',1,2],['tuple',3,4]]
等于,{(1,2),(3,4)} 要使检查返回True,集合中的所有元组必须具有唯一的数字作为其最左边的值。所以函数{(1,2),(1,4)}将返回false

目前,我已经为一个具有一个元组的集合实现了这一点,这将不需要检查元组中的唯一值:

if "set" in argument:
    print("Found a set")
    print("Next part of argument", argument[1])
    if "tuple" in argument[1]:
        print("Found a tuple, only one found so this argument is a function")
我不确定如何为可能包含多个元组的集合实现这一点,如上面的示例。

如何:

def is_function(thing):
    if thing[0] == 'set':
        different = len(set(element[1] for element in thing if element[0] == 'tuple'))
        tuples = sum(1 for element in thing if element[0] == 'tuple')
        return different == tuples
如果第一个元素是
'set'
,则计算元组中不同的第一个项目的数量(通过测量其集合的长度),并将其与列表中的“元组”数量进行比较

>>> is_function(['set',['tuple',1,2],['tuple',3,4]])
True
>>> is_function(['set',['tuple',1,2],['tuple',1,4]])
False

更好的解释:
  • 函数首先测试列表的第一个元素是否为“set”,如果不是,则函数终止(并返回
    None

  • 如果元素[0]='tuple',则会从thing中的元素的生成器理解
    元素[1]创建一个集合,该集合将是主列表中所有这些列表的所有第二个元素的集合,这些列表具有称为“tuple”的第一个元素。此集合将包含所有第一个值,每个值一次(因为它是一个集合)

  • 该集合的基数存储在
    different
    中。它是直接在
    “tuple”
    之后的不同元素的数量

  • 根据类似的生成器计算总和。同样,这将迭代第一个元素为“tuple”的所有子列表,但加起来的只是数字1,因此结果将是以“tuple”开头的子列表的数量

  • 函数返回
    different==tuples
    的结果;因此,如果它们相同,则为
    True
    ,否则为
    False
    。如果有多个“元组”具有相同的起始元素,则
    different
    将小于
    tuples
    ,因此它将返回
    False
    。如果没有,它将返回True,因为具有不同起始元素的“元组”的数量将与“元组”的数量相同

  • 这个怎么样:

    def is_function(thing):
        if thing[0] == 'set':
            different = len(set(element[1] for element in thing if element[0] == 'tuple'))
            tuples = sum(1 for element in thing if element[0] == 'tuple')
            return different == tuples
    
    如果第一个元素是
    'set'
    ,则计算元组中不同的第一个项目的数量(通过测量其集合的长度),并将其与列表中的“元组”数量进行比较

    >>> is_function(['set',['tuple',1,2],['tuple',3,4]])
    True
    >>> is_function(['set',['tuple',1,2],['tuple',1,4]])
    False
    

    更好的解释:
  • 函数首先测试列表的第一个元素是否为“set”,如果不是,则函数终止(并返回
    None

  • 如果元素[0]='tuple',则会从thing中的元素的生成器理解
    元素[1]创建一个集合,该集合将是主列表中所有这些列表的所有第二个元素的集合,这些列表具有称为“tuple”的第一个元素。此集合将包含所有第一个值,每个值一次(因为它是一个集合)

  • 该集合的基数存储在
    different
    中。它是直接在
    “tuple”
    之后的不同元素的数量

  • 根据类似的生成器计算总和。同样,这将迭代第一个元素为“tuple”的所有子列表,但加起来的只是数字1,因此结果将是以“tuple”开头的子列表的数量

  • 函数返回
    different==tuples
    的结果;因此,如果它们相同,则为
    True
    ,否则为
    False
    。如果有多个“元组”具有相同的起始元素,则
    different
    将小于
    tuples
    ,因此它将返回
    False
    。如果没有,它将返回True,因为具有不同起始元素的“元组”的数量将与“元组”的数量相同


  • 你最好修改你想要处理的数据结构,可能是像
    {'type':'set','data':[{'type':'tuple','data':(1,2)},{'type':'tuple','data':(3,4)}}这样的字典或是一个类之类的。它看起来像是一个家庭作业,因此,我不会为您编写代码,但我可以给出一些提示:使用
    for
    循环遍历列表的其余部分,并创建一个
    set
    ,这样您就可以检查元组中的第一个值是否已经存在,因此它不是唯一的。@TonyBabarino谢谢,我给你一个例子,你最好修改你想要处理的数据结构,可能是一个字典,比如
    {'type':'set','data':[{'type':'tuple','data':(1,2)},{'type':'tuple','data':(3,4)}
    或者一个类或者什么的。它看起来像是一个家庭作业,因此,我不会为您编写代码,但我可以给出一些提示:使用
    for
    循环遍历列表的其余部分,并创建一个
    set
    ,这样您就可以检查元组中的第一个值是否已经存在,因此它不是唯一的。@TonyBabarino谢谢,我要试一试虽然这确实有效,但我不太确定是否接受它,因为我不太确定这种方法到底发生了什么。@hezzag我很乐意更好地解释它,如果你愿意的话。@hezzag补充了一个更详细的解释。虽然这确实有效,但我还是犹豫是否接受它,因为我不太确定这个方法到底发生了什么。@hezzag如果你愿意的话,我很乐意更好地解释。@hezzag补充了一个更详细的解释。