{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## 通常のリスト生成 \n", "(リスト外延表記: list extension)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "extension_1 = []\n", "for i in range(10):\n", " extension_1.append(i)\n", "extension_1" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## リスト内包表記\n", "list comprehension" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "基本構文 \n", "[ **element** for **element** in **iterator**] \n", "僕は先に`[i for i in]`だけ書いてから修飾することが多いです。 " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "comprehension_1= [i for i in range(10)]\n", "comprehension_1" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## 速度" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100 loops, best of 3: 3.37 ms per loop\n" ] } ], "source": [ "%%timeit\n", "extension_1 = []\n", "for i in range(10000):\n", " extension_1.append(i)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1000 loops, best of 3: 1.05 ms per loop\n" ] } ], "source": [ "%%timeit\n", "comprehension_1= [i for i in range(10000)]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "list内包表記はコードがすっきりするだけでなく速度面でも有利です \n", "[参考: Pythonの内包表記はなぜ速い?](http://dsas.blog.klab.org/archives/51742727.html) \n", "遅い理由は大きく2つ\n", "- ループする度にリストオブジェクトのappendを参照する\n", "- appendをpythonの関数として実行する\n", "\n", "前者の影響はループの外に参照を追い出すことでも解消できます" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1000 loops, best of 3: 1.57 ms per loop\n" ] } ], "source": [ "%%timeit\n", "extension_1_ = []\n", "append=extension_1_.append\n", "for i in range(10000):\n", " append(i)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## ifを含む場合(後置if)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "リスト内包表記は後置ifが使えます" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[0, 2, 4, 6, 8]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "extension_2 =[]\n", "for i in range(10):\n", " if i%2==0:\n", " extension_2.append(i)\n", "extension_2" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[0, 2, 4, 6, 8]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "comprehension_2 = [i for i in range(10) if i%2==0]\n", "comprehension_2" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100 loops, best of 3: 4.08 ms per loop\n" ] } ], "source": [ "%%timeit\n", "extension_2 =[]\n", "for i in range(10000):\n", " if i%2==0:\n", " extension_2.append(i)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100 loops, best of 3: 3.15 ms per loop\n" ] } ], "source": [ "%%timeit\n", "comprehension_2 = [i for i in range(10000) if i%2==0]" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100 loops, best of 3: 3.81 ms per loop\n" ] } ], "source": [ "%%timeit\n", "extension_2_ =[]\n", "append=extension_2_.append\n", "for i in range(10000):\n", " if i%2==0:\n", " append(i)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "実はifが計算律速になるので、無理にリスト内包表記にする必要がなかったりします。" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## if ~ elseを含む場合 (条件演算子)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "紛らわしいですが、else節を含む場合は条件演算子(他で言う三項演算子)を使うのでifの位置が変わります \n", "(条件演算子はpython 2.5以降のみ対応です)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[0, '1', 2, '3', 4, '5', 6, '7', 8, '9']" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "extension_3 =[]\n", "for i in range(10):\n", " if i%2==0:\n", " extension_3.append(i)\n", " else:\n", " extension_3.append(str(i))\n", "extension_3" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[0, '1', 2, '3', 4, '5', 6, '7', 8, '9']" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "comprehension_3 = [ i if i%2==0 else str(i) for i in range(10)]\n", "comprehension_3" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "実際にはこちらと等価だと思えば理解しやすいかもしれません" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[0, '1', 2, '3', 4, '5', 6, '7', 8, '9']" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "extension_3_conditional =[]\n", "for i in range(10):\n", " extension_3_conditional.append(i) if i%2==0 else extension_3_conditional.append(str(i))\n", "extension_3_conditional" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "一応速度を測ってみます" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100 loops, best of 3: 12.4 ms per loop\n" ] } ], "source": [ "%%timeit\n", "extension_3 =[]\n", "for i in range(10000):\n", " if i%2==0:\n", " extension_3.append(i)\n", " else:\n", " extension_3.append(str(i))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100 loops, best of 3: 10.3 ms per loop\n" ] } ], "source": [ "%%timeit\n", "extension_3_ =[]\n", "append=extension_3_.append\n", "for i in range(10000):\n", " if i%2==0:\n", " append(i)\n", " else:\n", " append(str(i))" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100 loops, best of 3: 9.04 ms per loop\n" ] } ], "source": [ "%%timeit\n", "extension_3_conditional_ =[]\n", "append=extension_3_conditional_.append\n", "for i in range(10000):\n", " append(i) if i%2==0 else append(str(i))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100 loops, best of 3: 8.6 ms per loop\n" ] } ], "source": [ "%%timeit\n", "comprehension_3 = [ i if i%2==0 else str(i) for i in range(10000)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "あまり内包表記による高速化はありません" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## 辞書内包表記とセット内包表記" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "python2.7以降ではリスト以外の内包表記として、辞書内包やセット内包も使えます。" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'7': 7, '8': 8, '2': 2, '9': 9, '0': 0, '1': 1, '6': 6, '5': 5, '4': 4, '3': 3}\n" ] } ], "source": [ "comprehension_dict = {str(i):i for i in range(10)}\n", "print(comprehension_dict)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "zipとかと相性いいです。" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{'kinoko': 'yama', 'suginoko': 'mura', 'takenoko': 'sato'}" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "label = [\"kinoko\", \"takenoko\", \"suginoko\"]\n", "feature = [\"yama\", \"sato\", \"mura\"]\n", "{i:j for i,j in zip(label,feature)}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "python2.6まではdictにtupleを渡してあげます。" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'7': 7, '8': 8, '2': 2, '9': 9, '0': 0, '1': 1, '6': 6, '5': 5, '4': 4, '3': 3}\n" ] } ], "source": [ "comprehension_dict2 = dict((str(i),i) for i in range(10))\n", "print(comprehension_dict2)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "後置ifも使えます。" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'8': 8, '6': 6, '2': 2, '4': 4, '0': 0}\n" ] } ], "source": [ "comprehension_dict2 = {str(i):i for i in range(10) if i%2==0}\n", "print(comprehension_dict2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "条件演算子も使えます。 \n", "条件演算子なので、「:」の前後のkeyとvalueそれぞれに記載する必要があります。" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'2': 2, 1: '1', 3: '3', 5: '5', '0': 0, 7: '7', 9: '9', '6': 6, '4': 4, '8': 8}\n" ] } ], "source": [ "comprehension_dict3 = {str(i) if i%2==0 else i : i if i%2==0 else str(i) for i in range(10)}\n", "print(comprehension_dict3)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "これは動かないです。(以前やりましたorz)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (, line 1)", "output_type": "error", "traceback": [ "\u001b[1;36m File \u001b[1;32m\"\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m comprehension_dict4 = {str(i):i if i%2==0 else i:str(i) for i in range(10)}\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "comprehension_dict4 = {str(i):i if i%2==0 else i:str(i) for i in range(10)}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "セット内包表記にしたい時は : なしで {} で囲みます。" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{0, 1, 2, 3, 4}" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "comprehension_set={i%5 for i in range(10)}\n", "comprehension_set" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## ジェネレータ式とタプル内包表記" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "構文から勘違いしやすいですが、()で囲んでもタプル内包表記になりません。" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ " at 0x7f3000219678>" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "comprehension_gen=(i%5 for i in range(10))\n", "comprehension_gen" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false, "scrolled": true, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "1\n", "2\n", "3\n", "4\n", "0\n", "1\n", "2\n", "3\n", "4\n" ] } ], "source": [ "for i in comprehension_gen:print(i)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "()で囲うとジェネレータが発生します。むしろタプル内包表記より使います。 \n", "リストと違ってメモリ中に全要素を格納しないで、次の要素を順番に生成します。 \n", "内包表記を使わない書き方は下記ですが、一旦 ジェネレータを生成する関数を作らないと行けないので面倒です。" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def gen_func():\n", " for i in range(10):\n", " yield i\n", "extension_gen = gen_func()\n", "extension_gen" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "タプル内包表記が必要なことはあまりないですが、もしどうしても必要ならリスト内包表記をtuple関数に渡すしかないです。" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tuple([i for i in range(10)])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## 闇への道" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "この節を読み終えた後は[リーダブルコード](http://www.amazon.co.jp/dp/4873115655)を読んで浄化されることを推奨します。" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### 条件演算子を複数つなげる" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "2\n", "fizz\n", "4\n", "buzz\n", "fizz\n", "7\n", "8\n", "fizz\n", "buzz\n", "11\n", "fizz\n", "13\n", "14\n", "fizzbuzz\n" ] } ], "source": [ "for i in range(1,16):\n", " if i%15==0:\n", " print (\"fizzbuzz\")\n", " elif i%3==0:\n", " print (\"fizz\")\n", " elif i%5==0:\n", " print (\"buzz\")\n", " else:\n", " print(i)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false, "scrolled": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "[1,\n", " 2,\n", " 'fizz',\n", " 4,\n", " 'buzz',\n", " 'fizz',\n", " 7,\n", " 8,\n", " 'fizz',\n", " 'buzz',\n", " 11,\n", " 'fizz',\n", " 13,\n", " 14,\n", " 'fizzbuzz']" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[\"fizzbuzz\" if i%15==0 else \"fizz\" if i%3==0 else \"buzz\"\n", " if i%5==0 else i for i in range(1,16)]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "ネスト(多重配列)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", " [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", " [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "outer_list=[]\n", "for i in range(3):\n", " innter_list=[]\n", " for j in range(10):\n", " innter_list.append(j)\n", " outer_list.append(innter_list)\n", "outer_list" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", " [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", " [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[[j for j in range(10)] for i in range(3)]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "フラッタン \n", "この辺から可読性著しく悪くなります。" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": true }, "outputs": [], "source": [ "init=[[1,2,3],[4,5],[6,7]]" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[1, 2, 3, 4, 5, 6, 7]" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "flatten=[]\n", "for outer in init:\n", " for inner in outer:\n", " flatten.append(inner)\n", "flatten" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "これと等価" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[1, 2, 3, 4, 5, 6, 7]" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[inner for outer in init for inner in outer]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "基本的には左側のfor節から順番に読んでいって、最後にリストに入れるものが頭にくる \n", "インデントするならこんな感じ" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "[1, 2, 3, 4, 5, 6, 7]" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[\n", "inner\n", "for outer in init\n", " for inner in outer\n", "]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "パタトクカシー" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'パタトクカシーー'" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pato=\"パトカー\"\n", "taxi=\"タクシー\"\n", "rslt=[]\n", "for i in zip(pato,taxi):\n", " for j in i:\n", " rslt.append(\"\".join(j))\n", "\"\".join(rslt)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "'パタトクカシーー'" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"\".join([\"\".join(j) for i in zip(pato,taxi) for j in i])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "インデントすると" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'パタトクカシーー'" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"\".join(\n", " [\"\".join(j)\n", " for i in zip(pato,taxi)\n", " for j in i\n", " ]\n", ")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "printとか入れてもできる" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "パ\n", "タ\n", "ト\n", "ク\n", "カ\n", "シ\n", "ー\n", "ー\n" ] } ], "source": [ "for i in zip(pato,taxi):\n", " for j in i:\n", " for k in j: print(k)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "パ\n", "タ\n", "ト\n", "ク\n", "カ\n", "シ\n", "ー\n", "ー\n" ] }, { "data": { "text/plain": [ "[None, None, None, None, None, None, None, None]" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[print(k) for i in zip(pato,taxi) for j in i for k in j]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "if 節との多重ループの合わせ技" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import re\n", "DIO=[\"U\",\"無駄\",\"RR\",\"貧弱ゥ\",\"Y\"]" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'UURRRRYY'" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rslt=[]\n", "for i in DIO:\n", " if re.match(\"[URY]+\",i):\n", " for j in i:\n", " rslt.append(j*2)\n", "\"\".join(rslt)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "'UUURRRRRRYYY'" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"\".join([j*3 for i in DIO if re.match(\"[URY]+\",i) for j in i])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "インデントするとこんな感じ" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'UUUURRRRRRRRYYYY'" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"\".join(\n", " [\n", " j*4\n", " for i in DIO\n", " if re.match(\"[URY]+\",i)\n", " for j in i\n", " ]\n", ")" ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "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.5.1" } }, "nbformat": 4, "nbformat_minor": 0 }