2016-06-26 2 views
0

Я пытаюсь создать переменную 'listy', которая хранит все возможные комбинации чисел 6, 9 и 20 в заданном диапазоне.Понимание списков Python и создание переменной

Я начал с всех чисел, которые больше 5 и делимы на 3, а затем в этот список я добавил новый список, содержащий каждый элемент первого списка +20, и повторил процесс еще раз.

Я хочу создать список, используя только одну строку кода и понимание списка. Возможно ли, и если да, то как?

listy =[x for x in range(6,100) if x % 3 == 0] 
listy = listy + [x+20 for x in listy] + [x+40 for x in listy] 

Это печатает все числа, и я могу сортировать их легко, но я хочу более элегантное решение.

ответ

0

Вы можете попробовать:

>>> [i for j in map(lambda x: (x, x+20, x+40), [x for x in range(6,100) if x % 3 == 0]) for i in j] 

[6, 26, 46, 9, 29, 49, 12, 32, 52, 15, 35, 55, 18, 38, 58, 21, 41, 61, 24, 44, 64, 27, 47, 67, 30, 50, 70, 33, 53, 73, 36, 56, 76, 39, 59, 79, 42, 62, 82, 45, 65, 85, 48, 68, 88, 51, 71, 91, 54, 74, 94, 57, 77, 97, 60, 80, 100, 63, 83, 103, 66, 86, 106, 69, 89, 109, 72, 92, 112, 75, 95, 115, 78, 98, 118, 81, 101, 121, 84, 104, 124, 87, 107, 127, 90, 110, 130, 93, 113, 133, 96, 116, 136, 99, 119, 139] 
0

Вы можете отметить, что любое число больше 43 можно представить с комбинацией 3, 5 и 20 (это не так уж трудно доказать). И только цифры не более 43, которые необходимо 20 26, 29, 32, 35, 38, 41. Так в основном вы можете жёстко все подходящие значения:

listy = [x in [6, 9, 12, 15, 18, 21, 24, 26, 27, 29, 30, 32, 33, 35, 36, 38, 39, 41, 42] if x < MAX] # or any 43 < number < MAX 
listy = [x for x in range(6, MAX) if x % 3 == 0] + [x in [26, 29, 32, 35, 38, 41] if x < MAX]] # other way 

Также возможное решение с списковыми:

listy =[x for x in range(6,MAX) if x % 3 == 0 or (x>=26 and (x-20)%3 == 0)] 
Смежные вопросы