Skip to content

Instantly share code, notes, and snippets.

@astynax
Created August 6, 2013 09:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save astynax/6163096 to your computer and use it in GitHub Desktop.
Save astynax/6163096 to your computer and use it in GitHub Desktop.
Решение домашнего задания по м/к о (func|iter)tools
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "xx-tools homework"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## \u041c\u043e\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434/\u0437"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## tee"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 **tee** \u0431\u0443\u0434\u0443 \u0442\u0430\u043a"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def test(realization_of_tee):\n",
" a, b = realization_of_tee(iter(xrange(10)))\n",
" b.next()\n",
" return zip(a, b)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f **tee** \u0441 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0431\u0443\u0444\u0435\u0440\u0430\u043c\u0438 \u0434\u043b\u044f \u043a\u043e\u043f\u0438\u0439"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from collections import deque\n",
"\n",
"def tee1(iterable, n=2):\n",
" buffs = [deque() for _ in xrange(n)]\n",
" \n",
" def pull():\n",
" x = iterable.next()\n",
" for b in buffs:\n",
" b.appendleft(x)\n",
" \n",
" def worker(buff):\n",
" while True:\n",
" if not buff:\n",
" pull()\n",
" yield buff.pop()\n",
" \n",
" return map(worker, buffs)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print test(tee1)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]\n"
]
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f **tee** \u0441 \u0435\u0434\u0438\u043d\u044b\u043c \u0431\u0443\u0444\u0435\u0440\u043e\u043c"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def tee2(iterable, n=2):\n",
" # \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439,\n",
" # \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0435 \u0435\u0433\u043e \u0441\u0440\u0430\u0437\u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c\n",
" indexes = tuple(range(n))\n",
" \n",
" # \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438,\n",
" # \u0434\u0430\u0436\u0435 \u0432 \"\u0447\u0435\u0440\u043d\u043e\u0432\u043e\u043c\" \u043a\u043e\u0434\u0435\n",
" source = iter(iterable)\n",
"\n",
" buff = [] # \u0431\u0443\u0444\u0435\u0440 \u0441\u043f\u0438\u0441\u043e\u043a, \u0442.\u043a. \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0432 \u0441\u043f\u0438\u0441\u043a\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e\n",
" positions = [0] * n # c immutable-\u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c\n",
" \n",
" def cleanup():\n",
" \"\"\"\n",
" \u041e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0437 \u0445\u0432\u043e\u0441\u0442\u0430 \u0431\u0443\u0444\u0435\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b,\n",
" \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0432\u0441\u0435\u043c\u0438 \u043a\u0443\u0440\u0441\u043e\u0440\u0430\u043c\u0438\n",
" \"\"\"\n",
" min_pos = min(positions)\n",
" if min_pos > 0:\n",
" buff.pop(0)\n",
" for n in indexes:\n",
" positions[n] -= 1\n",
"\n",
" def pullup():\n",
" \"\"\"\n",
" \u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u044f\u0435\u0442 \u0431\u0443\u0444\u0435\u0440, \u0435\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0439 \u043b\u0438\u0431\u043e \u0438\u0437 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u0432 \u0434\u043e\u0441\u0442\u0438\u0433 \u0435\u0433\u043e \u0433\u043e\u043b\u043e\u0432\u044b\n",
" \"\"\"\n",
" max_pos = max(positions)\n",
" if max_pos >= len(buff):\n",
" buff.append(source.next())\n",
" \n",
" def worker(pos):\n",
" while True:\n",
" pullup()\n",
" yield buff[positions[pos]]\n",
" positions[pos] += 1\n",
" cleanup()\n",
" \n",
" return map(worker, indexes)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print test(tee2)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]\n"
]
}
],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 :)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from itertools import tee\n",
"\n",
"test(tee) == test(tee1) == test(tee2)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 6,
"text": [
"True"
]
}
],
"prompt_number": 6
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### \u0423\u0440\u0430!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## peekable"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0443 \u044d\u0442\u0438\u043c:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def test_peekable(realization, skip_tests=()):\n",
" \"\"\"\n",
" \u0422\u0435\u0441\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 peekable\n",
" @skip_tests - \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c\n",
" \"\"\"\n",
"\n",
" class Source(object):\n",
" u\"\"\"\n",
" \u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435\n",
" \u0437\u0430\u043f\u0443\u0441\u043a, \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443\n",
" \"\"\"\n",
" def __init__(self):\n",
" self.started = False\n",
" self.iterated = False\n",
" self.stopped = False\n",
" self._value = 0\n",
"\n",
" def __iter__(self):\n",
" self.started = True\n",
" return self\n",
" \n",
" def next(self):\n",
" self._value += 1\n",
" if self._value >= 10:\n",
" self.stopped = True\n",
" raise StopIteration()\n",
" self.iterated = True\n",
" return self._value\n",
" \n",
" src = Source()\n",
" p = realization(src)\n",
"\n",
" if not 'SKIP_START' in skip_tests and (\n",
" src.started or src.iterated\n",
" ):\n",
" # \u0414\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0438\n",
" # \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0438 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\n",
" print u\"\u0418\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u0434\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0438!\"\n",
" return\n",
" \n",
" p = iter(p)\n",
"\n",
" if not 'SKIP_NEXT' in skip_tests and (\n",
" src.iterated\n",
" ):\n",
" # \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f,\n",
" # \u043f\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043d\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f\n",
" print u\"\u0414\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u044b \u0434\u043e \u0437\u0430\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0445 \u0443 \u043e\u0431\u0451\u0440\u0442\u043a\u0438!\"\n",
" return\n",
"\n",
" p.peek()\n",
"\n",
" if not 'SKIP_STOP' in skip_tests and (\n",
" src.stopped\n",
" ):\n",
" # \u042d\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0434\u043b\u044f \u043e\u0442\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439,\n",
" # \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442 \u0432\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 \u0431\u0443\u0444\u0435\u0440, \u0438 \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e \u0431\u0443\u0444\u0435\u0440\u0443\n",
" print u\"\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0434\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u043e\u0431\u0451\u0440\u0442\u043a\u0435!\"\n",
" return\n",
" \n",
" result = []\n",
" for i in p:\n",
" result.append((i, p.peek(None)))\n",
"\n",
" if result != zip(range(1, 10), range(2, 10) + [None]):\n",
" print u\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0438 \u043e\u0442\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e!\"\n",
" return\n",
" \n",
" return True\n"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 7
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f **peekable**"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"class MyPeekable(object):\n",
" # \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0435\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (\u0417\u041f\u0423),\n",
" # \u0442.\u043a. None, \u044d\u0442\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0435 \u0417\u041f\u0423\n",
" __NODEFAULT = (((),),)\n",
" \n",
" def __init__(self, iterable):\n",
" self._iterable = iterable\n",
" self._iterated = False\n",
" self._peeked = False\n",
" \n",
" def __iter__(self):\n",
" # \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0438\n",
" if not self._iterated:\n",
" self._iterated = True\n",
" self._iterable = iter(self._iterable)\n",
" return self\n",
" \n",
" def peek(self, default=__NODEFAULT):\n",
" \"\"\"\n",
" \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0430,\n",
" \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0442.\u0435. \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442\n",
" \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 next()\n",
"\n",
" \u0415\u0441\u043b\u0438 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f\n",
" \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e @default, \u0435\u043b\u0441\u0438 \u043e\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e,\n",
" \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u0431\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 StopIteration\n",
" \"\"\"\n",
" if not self._peeked:\n",
" iter(self) # \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u0435\u0431\u044f \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439\n",
" try:\n",
" self._value = self._iterable.next()\n",
" except StopIteration:\n",
" if default is self.__NODEFAULT:\n",
" raise\n",
" return default\n",
" self._peeked = True\n",
" return self._value\n",
" \n",
" def next(self):\n",
" if not self._peeked:\n",
" self.peek()\n",
" self._peeked = False\n",
" return self._value"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"test_peekable(MyPeekable)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 9,
"text": [
"True"
]
}
],
"prompt_number": 9
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u044d\u0442\u0430\u043b\u043e\u043d"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from more_itertools import peekable\n",
"test_peekable(peekable)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\u0418\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u0434\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0438!\n"
]
}
],
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### \u0410-\u0445\u0430-\u0445\u0430! peekable, \u0447\u0442\u043e \u0442\u044b \u0434\u0435\u043b\u0430\u0435\u0448\u044c?! \u041f\u0440\u0435\u043a\u0440\u0430\u0442\u0438!\n",
"\n",
"\u042d\u0442\u0430\u043b\u043e\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u0440\u0438 \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438!\n",
"\n",
"\u041d\u0443 \u0447\u0442\u043e \u0436\u0435, \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043c \u0437\u0430\u0434\u0430\u0447\u0443:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"test_peekable(peekable, ('SKIP_START',))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 11,
"text": [
"True"
]
}
],
"prompt_number": 11
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### \u041d\u0443 \u0445\u043e\u0442\u044c \u0442\u0430\u043a :)"
]
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment