Форум сайта python.su
все привет. вот появился такой вопрос. возможно ли делать такие обходы одним фором? идеально если это не ограничит вложенность двумя массивами, а можно будет делать 2 и 3
for i in [0, 1, 2, 3, 4, 5]:
for j in [0, 1, 2, 3, 4, 5]:
print i + j
Офлайн
от задачи зависит
например
for i, j in zip(range(10), range(10)):
print i + j
Офлайн
test157ні
возможно ли делать такие обходы одним фором?
Офлайн
slav0nicя уже пробовал с зипом - но это не то, в моем примере видно же - что каждый раз с для каждого элемента i будет проходится весь массив j - вот нужен именно такой эффект, когда нужно сделать обход всех комбинаций. zip дает иной эффект.
for i, j in zip(range(0,5), range(5,10)):
print i, j
0 5
1 6
2 7
3 8
4 9
for i in range(0,5):
for j in range(0,5):
print i,j
0 0
0 1
0 2
0 3
0 4
1 0
1 1
1 2
1 3
1 4
2 0
2 1
2 2
2 3
2 4
3 0
3 1
3 2
3 3
3 4
4 0
4 1
4 2
4 3
4 4
Офлайн
Офлайн
да вот это что нужно, правда более изящно можно только в питоне 2.6 (( в 2.5 получается вот такой вариант, что имхо не сильно нагляднее предыдущего - но зато в одну строчку
for x, y in [(x,y) for x in [1,2,3] for y in [4,5,6]]:
print x,y
Отредактировано (Июнь 1, 2009 10:27:22)
Офлайн
по ссылке приводится код, эквивалентный функции product из itertools Python 2.6, правда он сразу вычисляет все итераторы.
Офлайн
если необходимо просто пройтись по всем элементам списка, то его можно рекурсивно “развернуть” =)
def expand_list(l):
result = []
for item in l:
if type(item) == type(list()): #а как, кстати, правильно узнавать тип переменной? =)
result = result + expand_list(item)
else:
result = result + [item]
return result
>>> l = [1,2,3,[4,5,[6,7,8,[9,10]]]]
>>> expand_list(l)
[1,2,3,4,5,6,7,8,9,10]
Офлайн
unelтип можно указывать просто - написав list без скобок
если необходимо просто пройтись по всем элементам списка, то его можно рекурсивно “развернуть” =)def expand_list(l):
result = []
for item in l:
if type(item) == type(list()): #а как, кстати, правильно узнавать тип переменной? =)
result = result + expand_list(item)
else:
result = result + [item]
return result>>> l = [1,2,3,[4,5,[6,7,8,[9,10]]]]
>>> expand_list(l)
[1,2,3,4,5,6,7,8,9,10]
Отредактировано (Авг. 18, 2009 06:22:15)
Офлайн