【问题标题】:Python: Mathematical Sets and TuplesPython:数学集和元组
【发布时间】:2016-03-17 01:02:16
【问题描述】:

我正在我的 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")

我不确定如何为可能包含多个元组的集合(如上面的示例)实现此功能。

【问题讨论】:

  • 你最好修改你要处理的数据结构,可能是像{'type':'set','data':[{'type':'tuple','data':(1,2)},{'type':'tuple','data':(3,4)}]}这样的字典或者一个类什么的。
  • 它看起来像一个家庭作业,所以我不会为你编写代码,但我可以提供一些提示:使用for 循环遍历列表的其余部分并创建一个set 所以你可以检查元组中的第一个值是否已经存在,因此它不是唯一的。
  • @TonyBabarino 谢谢,我会试一试

标签: python list math set tuples


【解决方案1】:

这个怎么样:

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. 函数首先测试列表的第一个元素是否“设置”,如果不是,函数终止(并返回None)。

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

  3. 该集合的基数存储在different 中。是"tuple"之后直接不同元素的数量。

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

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

【讨论】:

  • 虽然这确实有效,但我很犹豫是否接受它,因为我不太确定这种方法发生了什么。
  • @hezzag 如果您愿意,我很乐意解释得更好。
  • @hezzag 添加了更详细的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 2012-08-16
  • 2013-01-03
  • 2020-09-25
  • 1970-01-01
相关资源
最近更新 更多