{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "cbd685bb",
   "metadata": {},
   "source": [
    "# <span style=\"color: #0077FF\">Задания для практического занятия по теме «Одномерные списки»</span>   "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "abb42f6f",
   "metadata": {},
   "source": [
    "### Перед началом работы переименуйте файл! \n",
    "### Замените __NameStud__ на свои ФамилияИмя латиницей, __gr0__ на gr + номер Вашей группы."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d0727b3d",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-warning\"> 📌 При решении задач используйте функции ввода списка с клавиатуры, создания списка случайных чисел и печати элементов списка из прошлого ноутбука.📌\n",
    "    </div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b3b903e2",
   "metadata": {},
   "source": [
    "## <span style=\"color: #0077FF\">Замена, удаление и вставка элементов в списке. </span>   \n",
    "\n",
    "### <span style=\"color: #0077FF\">Пример 1. Замена элементов списка по значению. </span>   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "id": "ebc70ea5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[5, -2, 16, 8, -3]\n",
      "[5, 0, 16, 8, 0]\n"
     ]
    }
   ],
   "source": [
    "a = [5, -2, 16, 8, -3]\n",
    "print(a)\n",
    "for i in range(len(a)):\n",
    "    if a[i] < 0: a[i] = 0\n",
    "print(a)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7cbaa0c1",
   "metadata": {},
   "source": [
    "### <span style=\"color: #0077FF\">Пример 2. Замена элементов списка по номеру. </span>   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b7b92f74",
   "metadata": {},
   "outputs": [],
   "source": [
    "a = [5, 9, -2, 4, 1]\n",
    "print(a)\n",
    "k1, k2 = 2, 4\n",
    "a[k1], a[k2] = a[k2], a[k1]\n",
    "print(a)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "183fac29",
   "metadata": {},
   "source": [
    "### <span style=\"color: #0077FF\">Пример 3. Удаление элемента списка </span>   \n",
    "#### <span style=\"color: #0077FF\">Пример 3.1. Удаление элемента списка при помощи методов </span>   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "edd14fc0",
   "metadata": {},
   "outputs": [],
   "source": [
    "b = [8, 0, 3, 2, 5, 1, 4]\n",
    "print(b)\n",
    "nom = 3\n",
    "b.pop(nom) # удаление элемента с номером nom\n",
    "print(b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1ef33042",
   "metadata": {},
   "outputs": [],
   "source": [
    "b = [8, 0, 3, 2, 5, 1, 4]\n",
    "print(b)\n",
    "nom = 3\n",
    "del b[nom] # удаление элемента с номером nom\n",
    "print(b)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8f7f216a",
   "metadata": {},
   "source": [
    "\n",
    "#### <span style=\"color: #0077FF\">Пример 3.2. Удаление элемента списка по номеру при помощи срезов </span>   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2985bf45",
   "metadata": {},
   "outputs": [],
   "source": [
    "c = [1, 2, 3, 4, 5, 6]\n",
    "print(c)\n",
    "nom = 3\n",
    "c = c[:nom] + c[nom + 1:]\n",
    "print(c)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9f762b75",
   "metadata": {},
   "source": [
    "\n",
    "#### <span style=\"color: #0077FF\">Пример 3.3. Удаление ВСЕХ элементов списка по значению </span>   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "df058e52",
   "metadata": {},
   "outputs": [],
   "source": [
    "def func_del(x, xdel):\n",
    "    i = 0\n",
    "    while i < len(x):\n",
    "        if x[i] == xdel:\n",
    "            x = x[:i] + x[i + 1:]\n",
    "        else:\n",
    "            i += 1\n",
    "    return x\n",
    "\n",
    "c = [0, 1, 2, 0, 4, 5, 0]\n",
    "print(c)\n",
    "c = func_del(c, 0)\n",
    "print(c)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7953d5d8",
   "metadata": {},
   "source": [
    "### <span style=\"color: #0077FF\">Пример 4. Вставка элемента в список </span>   \n",
    "#### <span style=\"color: #0077FF\">Пример 4.1. Вставка элемента в список при помощи метода</span>   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a307f54b",
   "metadata": {},
   "outputs": [],
   "source": [
    "c = [0, 1, 2, 0, 4, 5, 0]\n",
    "print(c)\n",
    "nom = 3\n",
    "c.insert(nom, -100)\n",
    "print(c)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b6622e2c",
   "metadata": {},
   "source": [
    "\n",
    "#### <span style=\"color: #0077FF\">Пример 4.2. Вставка элемента в список при помощи срезов</span>   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5f7c67b3",
   "metadata": {},
   "outputs": [],
   "source": [
    "c = [0, 1, 2, 0, 4, 5, 0]\n",
    "print(c)\n",
    "k = 3\n",
    "x = -100\n",
    "c[k:k] = [x]\n",
    "print(c)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "43e70047",
   "metadata": {},
   "source": [
    "# <div class=\"alert alert-block alert-info\"> 📌 Во всех задачах считать, что «Дан список» означает сгенерирован случайным образом функцией random_list из прошлого ноутбука. Во всех заданиях красивая печать списка обязательна! 📌</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8b478c4e",
   "metadata": {},
   "source": [
    "### <b><span style=\"color: #0077FF\"> 💫 Задание 1. 💫 </span></b>   \n",
    "Дан список целых чисел. Удалить из списка все четные элементы."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "ec339382",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 -9 3 7 -3 -1 -9 -7 -5 -5 :D\n",
      "-9 3 7 -3 -1 -9 -7 -5 -5 :D\n"
     ]
    }
   ],
   "source": [
    "# begin скопировано, чтобы была отдельная программа \n",
    "from random import randint\n",
    "\n",
    "def random_list(count, nmin, nmax):\n",
    "    lst = []\n",
    "    for i in range(count):\n",
    "        x = randint(nmin, nmax)\n",
    "        lst += [x] \n",
    "    return lst\n",
    "\n",
    "def print_list(X): # параметр функции - список\n",
    "    for element in X: \n",
    "        print(element, end=' ')\n",
    "    print(':D')\n",
    "# end скопировано, чтобы была отдельная программа \n",
    "    \n",
    "a = random_list(10, -10, 10)\n",
    "print_list(a)\n",
    "\n",
    "i = 0\n",
    "while i < len(a):\n",
    "    if a[i] % 2 == 0:\n",
    "        a = a[:i] + a[i+1:]\n",
    "    else: i += 1\n",
    "print_list(a)\n",
    "        "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9f96c07c",
   "metadata": {},
   "source": [
    "### <b><span style=\"color: #0077FF\"> 💫 Задание 2. 💫 </span></b>   \n",
    "Дан список целых чисел, целое число $x$ и номер $k$. Вставить некоторое заданное число $x$ в целочисленный список до и после элемента с заданным номером $k$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "id": "bc29eb5d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-3 10 -1 -3 -2 -7 -4 -10 -5 -9 :)\n",
      "-3 10 -1 100 -3 100 -2 -7 -4 -10 -5 -9 :)\n"
     ]
    }
   ],
   "source": [
    "# begin скопировано, чтобы была отдельная программа \n",
    "from random import randint\n",
    "\n",
    "def random_list(count, nmin, nmax):\n",
    "    lst = []\n",
    "    for i in range(count):\n",
    "        x = randint(nmin, nmax)\n",
    "        lst += [x] \n",
    "    return lst\n",
    "\n",
    "def print_list(X): # параметр функции - список\n",
    "    for element in X: \n",
    "        print(element, end=' ')\n",
    "    print(':)')\n",
    "# end скопировано, чтобы была отдельная программа \n",
    "    \n",
    "a = random_list(10, -10, 10)\n",
    "print_list(a)\n",
    "\n",
    "x, k = 100, 3\n",
    "a = a[:k] + [x] + a[k:]\n",
    "a = a[:k+2] + [x] + a[k+2:]\n",
    "print_list(a)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "397e3f8c",
   "metadata": {},
   "source": [
    "### <b><span style=\"color: #0077FF\"> 💫 Задание 3. 💫 </span></b>   \n",
    "Дан список целых чисел. Поменять местами первый элемент и элемент с максимальным\n",
    "значением (если максимальных несколько, то с первым по порядку). Функцию max не использовать!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "id": "82f39c22",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6 9 10 10 9 4 4 4 1 6 :D\n",
      "10 2\n",
      "10 9 6 10 9 4 4 4 1 6 :D\n"
     ]
    }
   ],
   "source": [
    "# begin скопировано, чтобы была отдельная программа \n",
    "from random import randint\n",
    "\n",
    "def random_list(count, nmin, nmax):\n",
    "    lst = []\n",
    "    for i in range(count):\n",
    "        x = randint(nmin, nmax)\n",
    "        lst += [x] \n",
    "    return lst\n",
    "\n",
    "def print_list(X): # параметр функции - список\n",
    "    for element in X: \n",
    "        print(element, end=' ')\n",
    "    print(':D')\n",
    "# end скопировано, чтобы была отдельная программа \n",
    "    \n",
    "a = random_list(10, 1, 10)\n",
    "print_list(a)\n",
    "\n",
    "mx = 0\n",
    "for i in range(len(a)):\n",
    "    if a[i] > mx:\n",
    "        mx = a[i]\n",
    "\n",
    "        \n",
    "idx = a.index(mx)\n",
    "print(mx, idx)\n",
    "a[0], a[idx] = a[idx], a[0]\n",
    "print_list(a)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d413fd79",
   "metadata": {},
   "source": [
    "### <b><span style=\"color: #0077FF\"> 💫 Задание 4. 💫 </span></b>   \n",
    "Дан список целых чисел. В списке поменять местами элементы: первый отрицательный и последний отрицательный."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "id": "bd424559",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-1 -1 10 -2 -4 -9 8 -4 8 0 ;)\n",
      "0 -1 7 -4\n",
      "-4 -1 10 -2 -4 -9 8 -1 8 0 ;)\n"
     ]
    }
   ],
   "source": [
    "# begin скопировано, чтобы была отдельная программа \n",
    "from random import randint\n",
    "\n",
    "def random_list(count, nmin, nmax):\n",
    "    lst = []\n",
    "    for i in range(count):\n",
    "        x = randint(nmin, nmax)\n",
    "        lst += [x] \n",
    "    return lst\n",
    "\n",
    "def print_list(X): # параметр функции - список\n",
    "    for element in X: \n",
    "        print(element, end=' ')\n",
    "    print(';)')\n",
    "# end скопировано, чтобы была отдельная программа \n",
    "    \n",
    "a = random_list(10, -10, 10)\n",
    "print_list(a)\n",
    "\n",
    "ok = True  #надо искать первый отрицательный\n",
    "idx1 = idx2 = len(a) # на случай, если отрицательных нет\n",
    "for i in range(len(a)):\n",
    "    if a[i] < 0:\n",
    "        if ok: \n",
    "            idx1 = i\n",
    "            idx2 = i # на случай, если отрицательный один\n",
    "            ok = False\n",
    "        else:\n",
    "            idx2 = i\n",
    "\n",
    "if idx1 != len(a):  # есть отрицательные\n",
    "    print(idx1, a[idx1], idx2, a[idx2])\n",
    "    a[idx1], a[idx2] = a[idx2], a[idx1]\n",
    "    print_list(a)\n",
    "else:\n",
    "    print('Нет отрицательных')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "93e7c395",
   "metadata": {},
   "source": [
    "### <b><span style=\"color: #0077FF\"> 💫 Задание 5. 💫 </span></b>   \n",
    "Дан список целых чисел. Расположенные рядом числа одного знака образуют серию. Найти\n",
    "1) максимальную длину серии положительных чисел;\n",
    "2) самую длинную серию положительных чисел."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "id": "5d1454fc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-3 -9 9 6 -5 -9 -1 -6 0 -8 (^-^)ﾉ\n",
      "2\n"
     ]
    }
   ],
   "source": [
    "# begin скопировано, чтобы была отдельная программа \n",
    "from random import randint\n",
    "\n",
    "def random_list(count, nmin, nmax):\n",
    "    lst = []\n",
    "    for i in range(count):\n",
    "        x = randint(nmin, nmax)\n",
    "        lst += [x] \n",
    "    return lst\n",
    "\n",
    "def print_list(X): # параметр функции - список\n",
    "    for element in X: \n",
    "        print(element, end=' ')\n",
    "    print('(^-^)ﾉ')\n",
    "# end скопировано, чтобы была отдельная программа \n",
    "    \n",
    "a = random_list(10, -10, 10)\n",
    "print_list(a)\n",
    "\n",
    "cntP = mxP = 0\n",
    "for i in range(0, len(a)):\n",
    "    if a[i] > 0: \n",
    "        cntP += 1\n",
    "        mxP = max(mxP, cntP)\n",
    "    else:\n",
    "        cntP = 0\n",
    "\n",
    "print(mxP)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73c7e2d7",
   "metadata": {},
   "source": [
    "### <b><span style=\"color: #0077FF\"> 💫 Задание 6. 💫 </span></b>   \n",
    "Дан список целых чисел. Найти два элемента списка, модуль разности которых максимален, и поменять их местами."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "id": "639c783b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-7 5 1 6 -8 -5 -2 -2 -9 5 :))\n",
      "15 3 8\n",
      "-7 5 1 -9 -8 -5 -2 -2 6 5 :))\n"
     ]
    }
   ],
   "source": [
    "# begin скопировано, чтобы была отдельная программа \n",
    "from random import randint\n",
    "\n",
    "def random_list(count, nmin, nmax):\n",
    "    lst = []\n",
    "    for i in range(count):\n",
    "        x = randint(nmin, nmax)\n",
    "        lst += [x] \n",
    "    return lst\n",
    "\n",
    "def print_list(X): # параметр функции - список\n",
    "    for element in X: \n",
    "        print(element, end=' ')\n",
    "    print(':))')\n",
    "# end скопировано, чтобы была отдельная программа \n",
    "    \n",
    "a = random_list(10, -10, 10)\n",
    "print_list(a)\n",
    "\n",
    "idx1, idx2, maxdist = 0, 0, 0\n",
    "for i in range(len(a)-1):\n",
    "    for j in range(i+1, len(a)):\n",
    "        if abs(a[i] - a[j]) > maxdist:\n",
    "            maxdist = abs(a[i] - a[j])\n",
    "            idx1 = i\n",
    "            idx2 = j\n",
    "\n",
    "print(maxdist, idx1, idx2)    \n",
    "\n",
    "a[idx1], a[idx2] = a[idx2], a[idx1]\n",
    "print_list(a) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c662970f",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5d149f4c",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
