2016-06-07 3 views
3

Допустим, я пытаюсь напечатать от 0 до 25 и от 75 до 100. Прямо сейчас у меня есть:Как совместить два для петель

for x in range(0, 26): 
    print(x) 
for x in range(75, 101): 
    print(x) 

Есть ли способ, чтобы объединить их в один цикл которые приводят к:

print(x) 

?

Что-то вдоль линий:

for x in range(0, 26) and range(75, 101): 
    print(x) 

ответ

6

Вам нужно itertools.chain():

Сделать итератор, который возвращает элементы из первой итерации до тех пор, пока не будет исчерпан, а затем переходит к следующей итерации, пока все итерации не будут исчерпаны.

from itertools import chain 

for x in chain(range(0, 26), range(75, 101)): 
    print(x) 

работает как Python 2 и 3.

+1

Просто, чтобы добавить к @alecxe ответа: Если у вас есть список списков (или любую итерация), вы можете использовать from_iterable. i.i .: ** list_ = [iter1, iter2, ...] ** then: ** для x в chain.from_iterable (list _) ** Приятно использовать плоский список списков. – Hamlett

0
for x in list(range(0, 26)) + list(range(75, 101)): 
    print(x) 

Вы можете объединить два списка, добавив их.

+2

Обратите внимание, что с ошибкой «неподдерживаемый тип операндов для +:« диапазон »и« диапазон »на Python 3.x. – alecxe

+0

Вы можете обернуть в 'list (range (x, y))' – Busturdust

+0

Ahh. Я пропустил синтаксис print (x), указывающий, что они используют 3. Я скоро вступлю в силу. –

0

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

print("\n".join([str(x) for x in range(0,101) if x < 26 or x > 74])) 
1

Использование генераторов списков:

[i for j in (range(0, 26), range(75, 101)) for i in j]