Mam następujący kod:bardziej pythonic sposób iteracji listę wykluczając element każdej iteracji
items = ["one", "two", "three"]
for i in range(0, len(items)):
for index, element in enumerate(items):
if index != i:
# do something with element
Zasadniczo chcę wykluczyć każdego elementu raz iteracyjne resztę. Tak na liście mam powyżej, chciałbym następujące iteracji:
- „dwa”, „trzy”
- „jeden”, „trzy”
- „jeden”, „dwa”
Kod, który napisałem, wydaje się być małym C++ - czy jest lepsze rozwiązanie? (Nie chcę przechowywać wszystkich możliwych list w zmiennej)
EDYCJA: Nie podałem tego, ale rozmiar listy niekoniecznie musi być 3. Może być dowolnego rozmiaru.
EDYCJA 2: Wydaje się, że jest jeszcze jedno nieporozumienie: jeśli mam listę N, to potrzebuję N list o rozmiarze N-1, z których każdy nie ma elementu z oryginalnej listy.
Edycja 3: Lista w 4 pozycji, powinno dać ten wynik:
- 1, 2, 3
- 1, 3, 4
- 1, 2, 4
- 2 3, 4
Przewiduję dostaniesz kilkanaście odpowiedzi na to, 'itertools Wywołania 'i generatora będą wywoływane, ale na końcu nie zaproponujemy niczego lepszego niż początkowy kod. –
Nie, mógł użyć 'xrange (len (items))'. – Tobu
Nie, on już używa Pythona 3 :) –