首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果满足条件而无需在此上下文中提取TypeError,则如何将项添加到集合

如果满足条件而无需在此上下文中提取TypeError,则如何将项添加到集合
EN

Stack Overflow用户
提问于 2016-03-28 04:39:33
回答 2查看 39关注 0票数 0

因此,为了解释我的代码:我试图使用一个贪婪的迭代活动选择器算法来解决这个活动选择问题。我希望通过在一个会议列表中添加一个会议(一个会议是一个由两个元素组成的列表,比如[0, 1],0是开始时间,1是结束时间)到一个集合,如果它符合标准并返回该集合的长度,就可以得到可能的最大活动计数。但是我得到了一个TypeError on meetings_set.add(sorted_meetings[i]),我认为我知道原因(列表不是不变的),但我不知道如何编写代码。我密切关注活动选择问题的最优解的例子来创建这个算法。

代码语言:javascript
复制
def answer(meetings):
     sorted_meetings = sorted(meetings, key = lambda x: int(x[1]))
     meetings_set = set((sorted_meetings[1]))
     k = 1

     meetings_len = len(meetings)

     for i in range(2, meetings_len):
             if sorted_meetings[i][0] >= sorted_meetings[k][1]:
                 meetings_set.add(sorted_meetings[i])
                 k = i

     return len(meetings_set)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-28 04:45:00

每个“会议”都是一个由两个整数组成的列表。集合只能包含可访问的对象,而列表则不包含。一个可能的解决方案是,在将列表添加到您的“meetings_set”之前,将其设置为一个不可变的元组。

代码语言:javascript
复制
meetings_set.add(tuple(sorted_meetings[i]))

此外,您的代码将第一次会议的开始和结束时间添加为meetings_set的单独元素。

set构造函数将使初始集包含给定迭代的每个元素。set((sorted_meetings[1]))只是忽略了额外的一组括号,并将一个列表传递给构造函数,这就是错误的原因。您可以通过以下方式绕过这一问题:

代码语言:javascript
复制
meetings_set = set()
meetings_set.add(tuple(sorted_meetings[1]))

撇开:

我相信你所有的指数都差一个。您当前的代码没有考虑第一个元素(我不确定这是否有意)。下面是带有调整索引的示例代码:

代码语言:javascript
复制
def answer(meetings):
     sorted_meetings = sorted(meetings, key = lambda x: int(x[1]))

     meetings_set = set()
     meetings_set.add(tuple(sorted_meetings[0]))
     k = 0

     meetings_len = len(meetings)

     for i in range(1, meetings_len):
          if sorted_meetings[i][0] >= sorted_meetings[k][1]:
               meetings_set.add(tuple(sorted_meetings[i]))
               k = i

     return len(meetings_set)
票数 1
EN

Stack Overflow用户

发布于 2016-03-28 04:54:31

列表是不可理解的,因此不能用作set元素。元组是可选的,所以在将它们添加到集合之前,先将列表转换为元组。例如,若要向集合添加会议,请使用:

代码语言:javascript
复制
meetings_set.add(tuple(sorted_meetings[i]))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36256067

复制
相关文章

相似问题

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