Пропустить значение в функции диапазона в python

Каков питонический способ циклического перебора чисел и пропускания одного значения? Например, диапазон от 0 до 100, и я хотел бы пропустить 50.

Изменить: Здесь код, который я использую

for i in range(0, len(list)):
    x= listRow(list, i)
    for j in range (#0 to len(list) not including x#)
        ...

Ответы

Ответ 1

Вы можете использовать любой из них:

# Create a range that does not contain 50
for i in [x for x in xrange(100) if x != 50]:
    print i

# Create 2 ranges [0,49] and [51, 100] (Python 2)
for i in range(50) + range(51, 100):
    print i

# Create a iterator and skip 50
xr = iter(xrange(100))
for i in xr:
    print i
    if i == 49:
        next(xr)

# Simply continue in the loop if the number is 50
for i in range(100):
    if i == 50:
        continue
    print i

Ответ 2

for i in range(100):
    if i == 50:
        continue
    dosomething

Ответ 3

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

# get the squares of each number from 1 to 9, excluding 2
myList = [i**2 for i in range(10) if i != 2]
print(myList)

# --> [0, 1, 9, 16, 25, 36, 49, 64, 81]

Ответ 4

В дополнение к подходу Python 2 здесь приведены эквиваленты для Python 3:

# Create a range that does not contain 50
for i in [x for x in range(100) if x != 50]:
    print(i)

# Create 2 ranges [0,49] and [51, 100]
from itertools import chain
concatenated = chain(range(50), range(51, 100))
for i in concatenated:
    print(i)

# Create a iterator and skip 50
xr = iter(range(100))
for i in xr:
    print(i)
    if i == 49:
        next(xr)

# Simply continue in the loop if the number is 50
for i in range(100):
    if i == 50:
        continue
    print(i)

Диапазоны - это списки в Python 2 и итераторы в Python 3.

Ответ 5

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

import itertools

m, n = 5, 10
for i in itertools.chain(range(m), range(m + 1, n)):
    print(i)  # skips m = 5

Кроме того, вы не хотите использовать (*range(m), *range(m + 1, n)), даже если он работает, потому что он расширяет итерируемые элементы в кортеж, а это неэффективно для памяти.


Кредит: комментарий от njzk2, ответ от Локка

Ответ 6

for i in range(0, 101):
if i != 50:
    do sth
else:
    pass

Ответ 7

что вы могли бы сделать, ставится оператор if вокруг всего внутри цикла, который вы хотите оставить в стороне от 50. например.

for i in range(0, len(list)):
    if i != 50:
        x= listRow(list, i)
        for j in range (#0 to len(list) not including x#)