AD0DE412А объясните, зачем вы один генератор заворачиваете в другой генератор?
кста прикольная штука
Вот так будет тоже самое
inf_gen = itertools.count()
AD0DE412А объясните, зачем вы один генератор заворачиваете в другой генератор?
кста прикольная штука
inf_gen = itertools.count()
AD0DE412У всего есть название, цикл фор - “это цикл со счетчиком”, в низкоуровневый код он разворачивается как то так
вроде как да (эээ как мне кажется, тут больше подойдут слова - сравнение элемента(элементов)
int start = 0 // это счетчик
int end = 10
int step = 1
label:
if start < end:
// Это тело цикла
start += step
goto label
# codind: utf-8 for i in range(10): print(i) if i == 5: raise IndexError
FishHookне знаю (
А объясните, зачем вы один генератор заворачиваете в другой генератор?
Вот так будет тоже самое
# codind: utf-8 # python 2 import itertools if raw_input('--> ') == '1': inf_gen = (x for x in itertools.count()) else: inf_gen = itertools.count() for i in inf_gen: print type(inf_gen), inf_gen print i
--> 1 <type 'generator'> <generator object <genexpr> at 0x02B13DA0> 0
--> s <type 'itertools.count'> count(1) 0
[[(1 if i == j else 0) for i in range(10)] for j in range(10)]
import numpy as np m = np.full((10,10),0) width = m.shape[1] height = m.shape[0] for i in range(height): for j in range(width): if i == j: m[i,j] = 1
AD0DE412
зы FishHook вроде Лутц утверждает что for это перебор (next()) чего то итерируемого до ошибки выхода за пределы эээ “массива?” те что то вроде
AD0DE412А индекс где хранится? Текущий индекс - это и есть счётчик.
raise IndexError
AD0DE412
спсб … вроде понятно for потому, что он “достовляет” индекс, что упращает … многое.
LinkedList (связаные списки) выглядят прикольно но, это больше про java (покрайней мере если верить поисковикам, толька на 5 - 6 странице выскакивает что то с python)
FishHookДек - это всё-таки другая динамическая структура данных. Да, связный список можно на деке построить, но и на двух обычных списках можно построить.
В питоне вполне себе есть связные списки
Л2-список элементов типа E.
СП (полная):
1. начать работу
2. сделать список пустым
3. список пуст/список не пуст : да/нет
4. установить указатель в начало/конец списка
5. указатель в начале/конце списка : да/нет
6. передвинуть указатель списка вперёд/назад
7. добавить элемент <вх: E> до указателя/за указателем списка
8. взять элемент списка до указателя/за указателем в <вых: E>
9. элемент списка до указателя/за указателем :: E
10. удалить элемент списка до указателя/за указателем
11. кончить работу
СП (сокращённая):
1. начать работу
2. сделать пустым
3. пуст/не пуст : да/нет
4. установить в начало/конец
5. в начале/конце : да/нет
6. вперёд/назад
7. добавить <вх: E> до/за
8. взять до/за <вых: E>
9. до/за :: E
10. удалить до/за
11. кончить работу
#!/usr/bin/env python3
class L2List:
def __init__(self, seq=[]):
self.datal = []
self.datar = list(seq)
def iter_left(self):
while not self.atending():
self.gonext()
yield self.prevr()
def iter_right(self):
while not self.atbeginning():
self.goprev()
yield self.nextr()
def start(self):
self.datal = []
def clear(self):
self.datal = []
self.datar = []
def isempty(self):
return not (self.datal or self.datar)
def beginning(self):
self.datar = self.datal + self.datar
self.datal = []
def ending(self):
self.datal = self.datal + self.datar
self.datar = []
def atbeginning(self):
return self.datal == []
def atending(self):
return self.datar == []
def gonext(self):
if not self.datar:
raise ValueError('gonext on ending of list')
self.datal.append(self.datar.pop(0))
def goprev(self):
if not self.datal:
raise ValueError('goprev on beginning of list')
self.datar.insert(0, self.datal.pop())
def addnext(self, e):
self.datar.insert(0, e)
def addprev(self, e):
self.datal.append(e)
def popnext(self):
if not self.datar:
raise ValueError('popnext on ending of list')
return self.datar.pop(0)
def popprev(self):
if not self.datal:
raise ValueError('popprev on beginning of list')
return self.datal.pop()
def nextr(self):
if not self.datar:
raise ValueError('nextr on ending of list')
return self.datar[0]
def nextw(self, e):
if not self.datar:
raise ValueError('nextw on ending of list')
self.datar[0] = e
def prevr(self):
if not self.datal:
raise ValueError('prevr on beginning of list')
return self.datal[-1]
def prevw(self, e):
if not self.datal:
raise ValueError('prevw on beginning of list')
self.datal[-1] = e
def delnext(self):
if not self.datar:
raise ValueError('delnext on ending of list')
self.datar.pop(0)
def delprev(self):
if not self.datal:
raise ValueError('delprev on beginning of list')
self.datal.pop()
def end(self):
self.datal = []
self.datar = []
def __repr__(self):
return '{} ^ {}'.format(self.datal, self.datar)
def f():
lst = L2List()
lst.start()
print(lst.isempty())
lst.addnext(1)
lst.addnext(2)
lst.addnext(3)
print(lst.isempty())
print(lst.nextr())
lst.nextw(4)
print(lst.popnext())
print(lst.nextr())
lst.end()
if __name__ == '__main__':
f()
py.user.next
Дек - это всё-таки другая динамическая структура данных. Да, связный список можно на деке построить, но и на двух обычных списках можно построить.
/* Data for deque objects is stored in a doubly-linked list of fixed
* length blocks. This assures that appends or pops never move any
* other data elements besides the one being appended or popped.
*