Как объединить функции range ()

Для некоторого кода, который я пишу, мне нужно перебирать от 1 до 30 пропусков. 6. Я наивно наивно пытался

a = range(1,6) b = range(7,31) for i in a+b: print i 

Есть ли способ сделать это более эффективно?

3 Solutions collect form web for “Как объединить функции range ()”

В python 2 вы не объединяете «функции диапазона»; это только списки. Ваш пример хорошо работает. Но диапазон всегда создает полный список в памяти, поэтому лучший способ, если только нужен для цикла, может заключаться в использовании выражения генератора и xrange:

 range_with_holes = (j for j in xrange(1, 31) if j != 6) for i in range_with_holes: .... 

В выражении генератора часть if может содержать сложную логику, по которой числа пропускать.

Другим способом комбинирования iterables является использование itertools.chain :

 range_with_holes = itertools.chain(xrange(1, 6), xrange(7, 31)) 

Или просто пропустите нежелательный индекс

 for i in range(1, 31): if i == 6: continue ... 

Используйте itertools.chain :

 import itertools a = range(1,6) b = range(7,31) for i in itertools.chain(a, b): print i 

Или сложные выражения сглаживания генератора:

 a = range(1,6) b = range(7,31) for i in (x for y in (a, b) for x in y): print i 

Или пропустить в выражении генератора:

 skips = set((6,)) for i in (x for x in range(1, 31) if x not in skips): print i 

Любой из них будет работать для любых итераций (-ов), а не только для range s в Python 3 или lists s в Python 2.

Один из вариантов – использовать список пропусков и проверить на это, например:

 skips = [6, 42] for i in range(1,31): if i in skips: continue print i 
  • Целочисленное разделение по сравнению с напольным фактором: почему этот неожиданный результат?
  • Как работает функция min / max в вложенном списке?
  • байты против bytearray в Python 2.6 и 3
  • Интерполяция Python ConfigParser из иностранного раздела
  • Учебник для Python. Должен ли я использовать 2.x или 3.0?
  • Python - write () и writelines () и конкатенированные строки
  • Нормализация строк матричного питона
  • Как рассчитать следующую пятницу в Python?
  • Python - лучший язык программирования в мире.