Python:数学集和元组

Python: Mathematical Sets and Tuples

我正在我的 python 程序中实现一个方法来检查数学函数是否有效。

我的程序中的一个例子是:

['set',['tuple',1,2],['tuple',3,4]]

这等于,{(1,2),(3,4)} 对于 return True 的检查,集合中的所有元组必须有一个唯一的数字作为它们最左边的值。所以函数 {(1,2),(1,4)} 会 return 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

更好的解释:

  1. 函数首先测试列表的第一个元素是否为“set”,如果不是则函数终止(并且returns None)。

  2. 一个集合是从生成器理解 element[1] for element in thing if element[0] == 'tuple' 创建的,它将是主列表中所有那些列表的所有第二个元素的集合,这些列表的第一个元素称为“元组” .该集合将包含所有第一个值,每个值一次(因为它是一个集合)。

  3. 该集合的基数存储在 different 中。就是"tuple".

    后面不同元素的数量
  4. 从类似的生成器理解中计算出一个总和。同样,这遍历了所有第一个元素为“元组”的子列表,但加起来只是数字 1,因此结果将是以“元组”开头的子列表的数量。

  5. 函数return是different == tuples的结果;所以 True 如果它们相同, False 否则。如果有多个“元组”具有相同的起始元素,那么 different 将小于 tuples,因此它将 return False。如果没有,它将 return 为真,因为具有不同起始元素的“元组”的数量将与“元组”的数量相同。