【问题标题】:Set operations without using data type Set() [duplicate]在不使用数据类型 Set() 的情况下设置操作 [重复]
【发布时间】:2017-04-22 19:33:23
【问题描述】:

问题:

这是一个列表作为输入[A,B,C,E]

输出:

[A,B]
[A,C]
[A,E]
[B,C]
[B,E]
[C,E]

基本上,我想将列表与自身合并。

这是代码

pageSet_list = ['A', 'B', 'C', 'E']

pageSet_set = list() # To create a list of sets so that we can take their union

for page in pageSet_list:
    toBeAdded = set(page)
    pageSet_set.append(toBeAdded)
pageSet_list = list()

for i in range(len(pageSet_set)):
    for j in range(i,len(pageSet_set)):
        z=pageSet_set[i].union(pageSet_set[j])
        if (len(z) == 2): # somethin = set([])
            print 'z: ',z
            pageSet_list.append(z)

此代码的输出:

z:  set(['A', 'B'])
z:  set(['A', 'C'])
z:  set(['A', 'E'])
z:  set(['C', 'B'])
z:  set(['B', 'E'])
z:  set(['C', 'E'])

错误:

z:  set(['C', 'B'])

输出应该是z: set(['B', 'C'])

最近,我知道 set 是一个无序的数据结构,因此它不维护任何特定的元素顺序。通过union方法对两个集合进行并集运算,改变了元素的顺序。

我的问题是:

如何在不使用数据类型 set() 的情况下执行集合操作、并集和交集?

【问题讨论】:

  • 也许看看NumPy library
  • 订单可以重新创建吗?您可以稍后对数据进行排序以重新建立其顺序吗?以及如何通过交叉路口维持秩序?如果有(1, 2, 3)(3, 2),结果是什么?
  • 所以你想要combinations?我不明白为什么这里需要涉及集合
  • 基本上你想要的是将列表与自身合并(与set数据类型无关)。您只是在查找列表元素的所有对组合(换句话说,一次两个)。
  • 我同意这里的副本;如果你只是在解释器中输入set(['B', 'C']),它会将顺序反转为set(['C', 'B'])

标签: python list set


【解决方案1】:
import itertools

for acom in itertools.combinations('ABCD',2):
    print acom

【讨论】:

  • 好的,它适用于输入 [A,B,C,E] 。如何使它适用于列表 [['A', 'B'], ['A', 'C'], ['A', 'E']] ?这样我得到输出: [[A,B,C], [A,B,E], [A,C,E]] (长度为 3 的组合)
  • for acom in itertools.combinations(['AB', 'AC', 'AE'] ,2): print sorted(set(acom[0] + acom[1]))跨度>
  • for acom in combination(['AB', 'AC', 'AE','BC','BE','CE'] ,2): print sorted(set(acom[0 ] + acom[1])) 如何去除重复?
  • 在 itertools.combinations(['AB' ,'AC','AE','BC','BE','CE'],2)])))
  • 如果你解开那个pythonic mumbo jumbo,它是这样的:首先你得到一个字符串的组合列表,然后通过将其转换为集合来删除重复项,然后再次将其转换为列表,最后拆除字符串到列表中:list('ABC') is ['A','B','C']。
猜你喜欢
  • 2019-02-22
  • 2015-10-24
  • 2016-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 2014-04-13
相关资源
最近更新 更多