【问题标题】:Efficient way to compare a set with a list of sets in Python将集合与Python中的集合列表进行比较的有效方法
【发布时间】:2017-01-01 06:14:46
【问题描述】:

是否有任何有效的方法可以将集合与集合列表进行比较。目前我只是循环遍历集合列表并将列表中的每个元素与特定集合进行比较。 例如:set1=Set([1,2,5]) and lst1=[Set([1,2,3,4,5]),Set([10,11,12]),Set([7,8,9])] 现在我必须将set1 与列表lst1 中的每个集合进行比较。现在,如果我得到set1-st==0,其中stlst1 中的一个集合,我将打破循环,但在set1-st!=0 时会继续。 是否有任何有效的方法来进行这种比较,或者我们必须以旧方式进行(遍历列表并与给定的集合进行比较。)

【问题讨论】:

  • 你在那里大写Set。您是否在使用旧的 sets 模块及其 sets.Set 类?这已被弃用;你应该使用内置的set 类型。
  • 我正在使用set..

标签: list python-2.7 set


【解决方案1】:

在这种情况下你可以使用all()内置函数:

>>> set1=set([1,2,5])
>>> lst1=[set([1,2,3,4,5]),set([10,11,12]),set([7,8,9])] 
>>> 
>>> all(set1-i for i in lst1)
False
>>> 
>>> all(i-set1 for i in lst1)
True

或者根据您的情况,您可以使用set.union() 创建一个统一的列表集,然后对您的集和新集进行操作:

>>> set().union(*lst1)
{1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12}

【讨论】:

  • union 不是我的选择。并且不是all() 在后台做我现在正在做的事情(遍历列表并与给定的集合进行比较)。
  • @djtama 这里有两件事,如果你必须与所有项目进行比较,除了循环列表之外别无他法,否则你可能可以对列表项进行一些设置操作并转换将其设置为一组或更少,以减少循环次数。另请注意,all() 接受生成器表达式并且比常规循环执行得更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2018-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多