Вопрос по python – Для петель (новичок)

7

Я недавно начал изучать Python, и концепция циклов for все еще немного сбивает меня с толку. Я понимаю, что это вообще следует форматуfor x in y, гдеy это просто какой-то список.

Цикл для каждогоfor (int n: someArray) становитсяfor n in someArray,

И для циклаfor (i = 0; i < 9; i-=2) может быть представленfor i in range(0, 9, -2)

Предположим, вместо постоянного приращения, я хотелi*=2, или дажеi*=i, Это возможно, или я должен был бы использовать цикл while вместо этого?

Последнийfor цикл не имеет надлежащего конечного условия, еслиi являетсяintError: User Rate Limit Exceeded Antti Haapala
Error: User Rate Limit Exceeded Ashwini Chaudhary
вашfor i in range(0,9,-2) не будет повторяться в обратном направлении, если первое число меньше второго. hexparrot
Точнее, range () не может предоставить массив с отрицательным шагом для положительного значения. Это бесконечный цикл. dwerner

Ваш Ответ

5   ответов
1

print [x**2 for x in xrange(10)] # X to the 2nd power.

print [x**x for x in xrange(10)] # X to the Xth power.

[EXPRESSION for VARIABLE in ITERABLE if CONDITION]

:

def f(VARIABLE): return EXPRESSION
def c(VARIABLE): return CONDITION

filter(c, map(f, ITERABLE))

def square(x): return x**2

print map(square, xrange(10))

def hypercube(x): return x**x

print map(hypercube, xrange(10))

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededprint()Error: User Rate Limit Exceededlist()Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededveryError: User Rate Limit Exceeded0*2Error: User Rate Limit Exceeded4999999*2Error: User Rate Limit Exceeded
0

for i in seq(1, 9, lambda x: x*2):
    print i
...
1
2
4
8

seq

#!/bin/python
from timeit import timeit

def seq(a, b, f):
    x = a;
    while x < b:
        yield x
        x = f(x)

def testSeq():
    l = tuple(seq(1, 100000000, lambda x: x*2))
    #print l

def testGen():
    l = tuple((2**x for x in range(27)))
    #print l

testSeq();
testGen();

print "seq", timeit('testSeq()', 'from __main__ import testSeq', number = 1000000)
print "gen", timeit('testGen()', 'from __main__ import testGen', number = 1000000)

seq 7.98655080795
gen 6.19856786728

[EDIT]

def seq(a, b, f = None):
    x = a;
    if b > a:
        if f == None:
            f = lambda x: x+1
        while x < b:
            yield x
            x = f(x)
    else:
        if f == None:
            f = lambda x: x-1
        while x > b:
            yield x
            x = f(x)

for i in seq(8, 0, lambda x: x/2):
    print i

range/xrange</>

5

for c in 'abcdefg':
   # deal with the string on a character by character basis...

Файл:

with open('somefile','r') as f:
    for line in f:
         # deal with the file line by line

Словарь:

d={1:'one',2:'two',3:'three'}
for key, value in d.items():
   # deal with the key:value pairs from a dict

l=range(100)
for e in l[10:20:2]:
    # ever other element between 10 and 20 in l 

 for e in (i*i for i in range(10)):
     # the squares of the sequence 0-9...

 l=[1,5,10,15]
 for i in (i*2 for i in l):
     # the list l as a sequence * 2...
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededthe concept of for loops is still a little confusing for me. I understand that it generally follows the format for x in y, where y is just some list.Error: User Rate Limit Exceeded
11

for Цикл перебирает элементы списка. Список может содержать все что угодно, поэтому вы можете заранее составить список, содержащий каждый шаг.

Error: User Rate Limit Exceededfor цикл также может перебиратьError: User Rate Limit Exceeded, который представляет собой небольшой фрагмент кода вместо фактического списка. В Pythonrange() на самом деле генератор (хотя в Python 2.x, хотя,range() вернул список покаxrange() был генератор).

Например:

def doubler(x):
    while True:
        yield x
        x *= 2

for i in doubler(1):
    print i

Вышеfor цикл напечатает

1
2
4
8

и так далее, пока вы не нажмете Ctrl + C.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededfor i in (x*2 for x in range(10)):
Error: User Rate Limit Exceeded
8

выражение генератораError: User Rate Limit Exceeded

for i in (2**x for x in range(10)): #In Python 2.x, use `xrange()`.
    ...

Выражения генератора работают так же, как определение ручного генератора (как вError: User Rate Limit ExceededError: User Rate Limit Exceeded

Error: User Rate Limit Exceededrange(10) для значения, удваивая это значение и передавая его обратноforError: User Rate Limit Exceededrange() генератор не дает больше значений.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededdoubles = (x*2 for x in range(10))Error: User Rate Limit ExceededdoublesError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы