[英]Output Set and Its Contents in Python?
我只是想输出一个set
的内容(因为我必须使用这种被诅咒且僵化的类型),但是每次我去做它或遍历并打印每个元素时,我得到的是最后一个而不是其余的。 这是我的整个代码:
def factorial(n):
r = 1
for i in range(1, n + 1):
r *= i
return r
def nCr(n, r):
return factorial(n) / (factorial(r) * factorial(n - r))
def combinations(s, tokens):
maxcombos = int(nCr(len(s), tokens))
for index in range(maxcombos):
token_copy = tokens
combo = []
for val in range(1, len(s) + 1):
if not token_copy:
break
thresh = nCr(len(s) - val, token_copy - 1)
if index < thresh:
combo.append(s.pop())
token_copy -= 1
else:
index -= thresh
yield tuple(combo)
def powerset(s):
pset = set()
for num_tokens in range(1, len(s)):
for combo in combinations(s, num_tokens):
pset.add(combo)
pset.update(s)
#pset.update(tuple())
return pset
if __name__ == '__main__':
s = set([1,2,23])
p = powerset(s)
msg = "Initial set: set(["
for (i, item) in enumerate(s):
msg += str(item) + ", "
msg += "])"
print(msg)
#print(powerset())
我只希望每个人都像普通集合一样出现在这些([])
之间。 有没有一种方法可以简单地输出整个变量及其内容? 谢谢!
您的powerset
函数实际上会更改其输入。 combinations
使用s.pop()
。 几乎可以肯定这是错误的,并且可以解释为什么尝试打印时其内容已更改。
最简单的修复方法是使用itertools
文档中的配方替换powerset
函数: http : powerset
from itertools import chain, combinations
def powerset(input_set):
"powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
s = list(input_set)
return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
将组合定义的顶部更改为以下内容:
def combinations(r, tokens):
s = set(r)
# everything else you had
这将创建一个新集合,在组合功能中将不会更改该集合。 之前对其进行更改的原因是,组合中的局部变量是对函数外部同一对象的引用。 如果两个名称引用相同的对象,则对其中一个进行更改会影响另一个。
在主要方面,您需要以下内容:
for (i, item) in enumerate(s):
msg += str(item) + ", "
msg = msg[:-2]
msg += "])"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.