我想写这样的东西
S = [ 0, 1, 2 ]
F = [ S.without(i) for i in range(0,len(S)) ]
print F
和Python推出
[[0,1],[0,2],[1,2]]
并且在在线参考中没有找到类似的东西。你能救我吗?
答案 0 :(得分:6)
Python提供itertools.combinations
,它完全符合您的要求:
>>> import itertools
>>> s = [0,1,2]
>>> list(itertools.combinations(s, len(s) - 1))
[(0, 1), (0, 2), (1, 2)]
更好的是,它会返回一个生成器,因此您可以轻松地迭代所有组合而无需占用太多内存。
答案 1 :(得分:2)
>>> S = [0, 1, 2]
>>> F = [S[0:i] + S[i+1:] for i in range(len(S))]
>>> print F
[[1, 2], [0, 2], [0, 1]]
>>>
如果您不需要任何顺序的元素 - 也就是说,如果您可以使用集合 - 并且如果您想通过值而不是删除项目index ,那么这是一个更优雅的解决方案:
>>> S = set(range(3))
>>> F = [S - set((i,)) for i in S]
>>> F
[set([1, 2]), set([0, 2]), set([0, 1])]
答案 2 :(得分:1)
嵌套列表理解可以完成这项工作:
>>> S = [ 0, 1, 2 ]
>>> F = [[x for x in S if x != s] for s in S]
>>> print F
[[1, 2], [0, 2], [0, 1]]