Понимание переменных нескольких переменных

Я работаю над Project Euler # 35 , и мне нужно найти круговые перестановки числа. Используя itertools , я могу легко получить перестановки числа. Тем не менее, я хочу сделать это с пониманием списка (как кажется, более Pythonic, я также пытаюсь ознакомиться со списками).

Я обнаружил, что все круговые простые числа могут содержать только цифры 1, 3, 7 и 9 (это исключает 2 и 5, которые по определению являются круговыми числами). Если какая-либо другая цифра была в числе (0, 2, 4, 5, 6 или 8), одна из перестановок не была бы простой (так как эта цифра была бы последней, по крайней мере, в одной из перестановок).

Таким образом, я попытался сделать это:

 from itertools import permutations l = [x for x in list(permutations('1397', y)) for y in range(7)] 

Мне нужно было использовать y for y in range(7) так что я получаю переменную длину перестановок.

Однако это дало мне TypeError :

 Traceback (most recent call last): File "<pyshell#23>", line 1, in <module> l = [x for x in list(permutations('1397', y)) for y in range(7)] TypeError: an integer is required 

Это работает, но не использует две переменные в одном понимании списка:

 l = [] for y in range(7): l.append([x for x in list(permutations('1379', y))]) 

Как я могу выполнить понимание списка с двумя переменными? Благодаря!

2 Solutions collect form web for “Понимание переменных нескольких переменных”

Для for y in range(7) часть должна появиться перед перестановочным контуром .:

 l = [x for y in range(7) for x in list(permutations('1397', y))] 

Вышеприведенное понимание списка эквивалентно:

 In [93]: l = [] In [94]: for y in range(7): ...: l.extend(list(permutations('1397', y))) 

Например:

 In [76]: l = [x for y in range(3) for x in list(permutations('1397', y))] In [77]: l Out[77]: [(), ('1',), ('3',), ('9',), ('7',), ('1', '3'), ('1', '9'), ('1', '7'), ('3', '1'), ('3', '9'), ('3', '7'), ('9', '1'), ('9', '3'), ('9', '7'), ('7', '1'), ('7', '3'), ('7', '9')] 

И версия list-comprehension для вашего рабочего примера,

 l = [] for y in range(7): l.append(list(permutations('1397', y))) 

является:

 In [85]: l = [list(permutations('1397', y)) for y in range(3)] In [86]: l Out[86]: [[()], [('1',), ('3',), ('9',), ('7',)], [('1', '3'), ('1', '9'), ('1', '7'), ('3', '1'), ('3', '9'), ('3', '7'), ('9', '1'), ('9', '3'), ('9', '7'), ('7', '1'), ('7', '3'), ('7', '9')]] 
 [list(permutations('1397',x)) for x in range(7)] 
  • Учет списков в Python: установите все элементы в массиве в 0 или 1
  • Выделение элементов из списка python с определенными индексами
  • фильтрация элементов из списка списков в Python?
  • Используя понимание списков в Python, чтобы сделать что-то похожее на zip ()?
  • Python: найдите последовательное изменение в одном члене пар списка, сообщите другое
  • Использование определения списка для соответствия значениям словарей, которые хранятся в списках
  • Python - просмотр списка с несколькими аргументами в
  • Элегантный способ получить hashtags из строки в Python?
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.