A more pythonic way of iterating a list while excluding an element each iteration
python
Solution
Although upvoted like crazy, my first solution wasn't what the OP wanted, which is N lists, each missing exactly one of the N original elements:
>>> from itertools import combinations
>>> L = ["one", "two", "three", "four"]
>>> for R in combinations(L, len(L) - 1):
... print " and ".join(R)
...
one and two and three
one and two and four
one and three and four
two and three and four
See the revision history for the source of the discussion below.
Problem
I have the following code: ``` items = ["one", "two", "three"] for i in range(0, len(items)): for index, element in enumerate(items): if index != i: # do something with element ``` Basically I want to exclude every element once and iterate the rest. So for the list I have above, I'd like the following iterations: - "two", "three" - "one", "three" - "one", "two" The code I've written now seems a little C++-ish, is there a better solution? (I do not want to hold all possible lists in a variable) EDIT: I didn't state this but the lists size isn't necessarily 3. It can be of any size. EDIT 2: It seems there's another misunderstanding: if I have a list of N, then I want N lists of size N-1, each missing an element from the original list. EDIT 3: A list with 4 items, should give this result: - 1, 2, 3 - 1, 3, 4 - 1, 2, 4 - 2, 3, 4