Я хочу генерировать списки из четырех простых чисел во всех возможных комбинациях, чтобы числа никогда не повторялись в этом списке.Получение всех простых комбинаций с 4 для циклов - Python
Я знаю, как получить то, что я хочу с помощью этой функции:
def combinations():
primeList = [2, 3, 5, 7, 11, 13, 17]
length = len(primeList)
for i in range(0, length-3):
for j in range(i+1, length-2):
for k in range(j+1, length-1):
for h in range(k+1, length):
print([primeList[i], primeList[j], primeList[k], primeList[h]])
который возвращает такие списки: http://postimg.org/image/94u3hzgqb/
Но я хочу, чтобы использовать код, построенный, как показано ниже, потому что я хочу эту конкретную структуру и хотите знать причину, по которой она не действует так же, как функция, которую я только что скопировал.
def combinations2():
primeList = [2, 3, 5, 7, 11, 13, 17]
for i1, i in enumerate(primeList[0: -3]):
for i2, j in enumerate(primeList[i1+1: -2]):
for i3, k in enumerate(primeList[i2+1: -1]):
for h in primeList[i3+1:]:
print([i, j, k, h])
который возвращает список с повторяющимися элементами: http://postimg.org/image/y0h0gwfhf/
Видимо я использую для цикла с Перечислим неправильный путь, но не могу понять, где я мог бы неправильно. Для меня обе функции выглядят так, как будто они должны делать то же самое.
Если вы можете, пожалуйста, укажите ошибку, которую я делаю или исправляю в противном случае.
Рассматривали ли вы [itertools.combinations] (https://docs.python.org/2/library/itertools .html # itertools.combinations)? Например. 'itertools.combinations (primeList, 4)' –
Вам действительно нужны петли? Попробуйте 'itertools.combinations' и ответьте на [that] (http://stackoverflow.com/questions/464864/python-code-to-pick-out-all-possible-combinations-from-a-list) вопрос –