Я хотел бы написать что-то вроде этого
S = [ 0, 1, 2 ]
F = [ S.without(i) for i in range(0,len(S)) ]
print F
и Python, вставляя
[[0,1], [0,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]]
>>>
Если вам не нужны элементы в любом порядке - то есть, если вы можете использовать наборы - и если вы хотите удалить элементы по значению, а не по индексу, то это более элегантное решение:
>>> S = set(range(3))
>>> F = [S - set((i,)) for i in S]
>>> F
[set([1, 2]), set([0, 2]), set([0, 1])]
S = [1, 1, 2, 2]
. Я не уверен, какой ОП просит.
Python предоставляет itertools.combinations
, который делает именно то, что вы хотите:
>>> import itertools
>>> s = [0,1,2]
>>> list(itertools.combinations(s, len(s) - 1))
[(0, 1), (0, 2), (1, 2)]
Еще лучше, он возвращает генератор, поэтому вы можете легко перебирать все комбинации, не используя много памяти.
list
list
s.
Вложенное понимание списка может выполнять следующее задание:
>>> 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]]
[[1, 2], [0, 2], [0, 1]]
?without
? Существует некоторая путаница по поводу того, что он должен делать.