我找到了this和this,但就我所知,我相信我并没有重复这些问题。
虽然修补编写最短的代码 我 可以编写以查找集合的powerset,但我遇到了这种行为:
lst = [1,2,3]
powerset = set([()])
[powerset.update([subset + tuple([x]) for subset in powerset]) for x in lst]
print 'powerset:', sorted(powerset, key = lambda x: len(x))
> powerset: [(), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]
令我更进一步的是,即使列表理解产生的列表完全不同,也会更新powerset。
lst = [1,2,3]
powerset = set([()])
holy_ghost = [powerset.update([subset + tuple([x]) for subset in powerset]) for x in lst]
print 'holy_ghost:', holy_ghost
print 'powerset:',sorted(powerset, key = lambda x: len(x))
print type(powerset),', len:', len(powerset)
> holy_ghost: [None, None, None]
> powerset: [(), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]
> <type 'set'> , len: 8
这是列表推导的嵌套循环版本,需要一个&#34; dummy&#34;变量以避免"Set changed size during iteration"
运行时错误。
lst2 = [1,2,3]
powerset2 = set([()])
for x in lst2:
dummy = set(powerset2)
for subset in powerset2:
dummy.update([subset + tuple([x])])
powerset2 = dummy
print sorted(powerset2, key = lambda x: len(x))
[(), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]
问题:在python 2.7中,这是否可以安全使用列表理解样式代码?
我不是程序员,所以如果你把它放在我的水平(初学者+ /中级 - )我会很感激:)
感谢。