Как объединить функции 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 
  • Идеальный способ создания библиотеки «Python»
  • «ImportError: ошибка загрузки DLL» при попытке импортировать pymssql в Windows
  • Python: конвертировать кортеж в разделенную запятыми строку
  • TypeError: super () принимает не менее 1 аргумента (0 данных), которая является конкретной для любой версии python?
  • Как организовать модули Python для PyPI для поддержки 2.x и 3.x
  • Изменение компонентов URL в Python 2
  • Открыть файлы в режиме «рок-н-ролл»
  • Нормализация строк матричного питона
  • Python - лучший язык программирования в мире.