Skip to content

Instantly share code, notes, and snippets.

@St-Hakky
Created February 7, 2018 02:23
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 St-Hakky/c1efc160b3a2a7c2b6a77d1cdd093d38 to your computer and use it in GitHub Desktop.
Save St-Hakky/c1efc160b3a2a7c2b6a77d1cdd093d38 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"toc": "true"
},
"source": [
"# Table of Contents\n",
" <p><div class=\"lev1 toc-item\"><a href=\"#Loops-(while/for/内包表記)\" data-toc-modified-id=\"Loops-(while/for/内包表記)-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Loops (while/for/内包表記)</a></div><div class=\"lev2 toc-item\"><a href=\"#while\" data-toc-modified-id=\"while-11\"><span class=\"toc-item-num\">1.1&nbsp;&nbsp;</span>while</a></div><div class=\"lev2 toc-item\"><a href=\"#for\" data-toc-modified-id=\"for-12\"><span class=\"toc-item-num\">1.2&nbsp;&nbsp;</span>for</a></div><div class=\"lev2 toc-item\"><a href=\"#少し書き方が特殊なループ\" data-toc-modified-id=\"少し書き方が特殊なループ-13\"><span class=\"toc-item-num\">1.3&nbsp;&nbsp;</span>少し書き方が特殊なループ</a></div><div class=\"lev1 toc-item\"><a href=\"#内包表記\" data-toc-modified-id=\"内包表記-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>内包表記</a></div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Loops (while/for/内包表記)\n",
"\n",
"JuliaのLoopは、どうもこの2つみたいなので、これについて勉強します。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## while\n",
"\n",
"whileを用いたループ処理は、以下のような形で書く。\n",
"\n",
"```\n",
"while *condition*\n",
" *loop*\n",
"end\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2018-02-07T11:22:25.394000Z",
"start_time": "2018-02-07T02:22:24.462Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\n",
"2\n",
"3\n",
"4\n",
"5\n",
"6\n",
"7\n",
"8\n",
"9\n",
"10\n"
]
}
],
"source": [
"i = 0\n",
"# pythonだと、コロンをつけるが、juliaはendでwhileの終わりを判定しているので、つけない。。。\n",
"# 違和感。。。\n",
"while i < 10\n",
" i += 1\n",
" println(i)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2018-02-07T11:22:27.462000Z",
"start_time": "2018-02-07T02:22:27.439Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"apple\n",
"banana\n",
"orange\n"
]
}
],
"source": [
"fruits = [\"apple\", \"banana\", \"orange\"]\n",
"\n",
"i = 1\n",
"while i <= length(fruits)\n",
" println(fruits[i])\n",
" i += 1\n",
"end"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## for\n",
"\n",
"以下のような形で書く。\n",
"\n",
"```\n",
"for *var* in *loop iterable*\n",
" *loop body*\n",
"end\n",
"```\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2018-02-07T11:22:29.506000Z",
"start_time": "2018-02-07T02:22:29.495Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\n",
"2\n",
"3\n",
"4\n",
"5\n"
]
}
],
"source": [
"# for loopはPythonに似たような感じの使い方ができる。\n",
"# こちらも、コロンではなくて、endで、ループのbodyの箇所を判定する\n",
"for i = 1:5\n",
" println(i)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2018-02-07T11:22:31.366000Z",
"start_time": "2018-02-07T02:22:31.352Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"apple\n",
"banana\n",
"orange\n"
]
}
],
"source": [
"# iterableであればいいので、配列のループもできる\n",
"fruits = [\"apple\", \"banana\", \"orange\"]\n",
"\n",
"for i in fruits\n",
" println(i)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2018-02-07T11:22:33.080000Z",
"start_time": "2018-02-07T02:22:33.062Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"apple\n",
"banana\n",
"orange\n"
]
}
],
"source": [
"# タプルもできる\n",
"fruits = (\"apple\", \"banana\", \"orange\")\n",
"\n",
"for i in fruits\n",
" println(i)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2018-02-07T11:22:34.702000Z",
"start_time": "2018-02-07T02:22:34.534Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"orange は 3 個あります\n",
"banana は 2 個あります\n",
"apple は 1 個あります\n"
]
}
],
"source": [
"# 辞書も試してみる。\n",
"fruits = Dict(\"apple\" => 1, \"banana\" => 2, \"orange\" => 3)\n",
"\n",
"# ちなみに、カッコをつけないとエラーになるので注意\n",
"for (k, v) in fruits\n",
" println(\"$k は $v 個あります\")\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2018-02-07T11:22:37.320000Z",
"start_time": "2018-02-07T02:22:37.294Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"a\n",
"p\n",
"p\n",
"l\n",
"e\n"
]
}
],
"source": [
"# 文字列のループも試してみる\n",
"apple = \"apple\"\n",
"\n",
"# pythonと同じくこれもiterableなので、できる。\n",
"for i in apple\n",
" println(i)\n",
"end"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 少し書き方が特殊なループ\n",
"\n",
"Pythonとは少し違う書き方をするループの書き方を見ておきます。"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"ExecuteTime": {
"end_time": "2018-02-07T11:22:39.189000Z",
"start_time": "2018-02-07T02:22:39.057Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1, 2)\n",
"(1, 3)\n",
"(2, 2)\n",
"(2, 3)\n"
]
}
],
"source": [
"# 2つ以上の配列をループする\n",
"# この書き方をすると、Pythonだと2重ループみたいに書かないといけないところが、一行でかけるようになる。\n",
"for i = 1:2, j = 2:3\n",
" println((i, j))\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2018-02-07T11:22:40.731000Z",
"start_time": "2018-02-07T02:22:40.710Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1, 2)\n",
"(1, 3)\n",
"(1, 4)\n",
"(1, 5)\n",
"(2, 2)\n",
"(2, 3)\n",
"(2, 4)\n",
"(2, 5)\n"
]
}
],
"source": [
"# 1つのループではないので、以下のように要素の数が違っていても良い。\n",
"for i = 1:2, j = 2:5\n",
" println((i, j))\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2018-02-07T11:22:40.917000Z",
"start_time": "2018-02-07T02:22:40.888Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1, 3)\n",
"(2, 4)\n"
]
}
],
"source": [
"# 同時にループを回したい場合は、zip関数を使う\n",
"for (i, j) in zip(1:2, 3:4)\n",
" println((i, j))\n",
"end"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 内包表記\n",
"\n",
"pythonでは非常によく使う内包表記だが、これをJuliaでもできるので、試す"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"ExecuteTime": {
"end_time": "2018-02-07T11:22:43.769000Z",
"start_time": "2018-02-07T02:22:42.758Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"3-element Array{String,1}:\n",
" \"apple\" \n",
" \"banana\"\n",
" \"orange\""
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# なんの意味もない例だが、以下のようにできる\n",
"fruits = [i for i in [\"apple\", \"banana\", \"orange\"]]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"ExecuteTime": {
"end_time": "2018-02-07T11:22:44.678000Z",
"start_time": "2018-02-07T02:22:42.894Z"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"100×100 Array{Int64,2}:\n",
" 102 103 104 105 106 107 108 109 … 195 196 197 198 199 200 201\n",
" 103 104 105 106 107 108 109 110 196 197 198 199 200 201 202\n",
" 104 105 106 107 108 109 110 111 197 198 199 200 201 202 203\n",
" 105 106 107 108 109 110 111 112 198 199 200 201 202 203 204\n",
" 106 107 108 109 110 111 112 113 199 200 201 202 203 204 205\n",
" 107 108 109 110 111 112 113 114 … 200 201 202 203 204 205 206\n",
" 108 109 110 111 112 113 114 115 201 202 203 204 205 206 207\n",
" 109 110 111 112 113 114 115 116 202 203 204 205 206 207 208\n",
" 110 111 112 113 114 115 116 117 203 204 205 206 207 208 209\n",
" 111 112 113 114 115 116 117 118 204 205 206 207 208 209 210\n",
" 112 113 114 115 116 117 118 119 … 205 206 207 208 209 210 211\n",
" 113 114 115 116 117 118 119 120 206 207 208 209 210 211 212\n",
" 114 115 116 117 118 119 120 121 207 208 209 210 211 212 213\n",
" ⋮ ⋮ ⋱ ⋮ \n",
" 190 191 192 193 194 195 196 197 283 284 285 286 287 288 289\n",
" 191 192 193 194 195 196 197 198 284 285 286 287 288 289 290\n",
" 192 193 194 195 196 197 198 199 … 285 286 287 288 289 290 291\n",
" 193 194 195 196 197 198 199 200 286 287 288 289 290 291 292\n",
" 194 195 196 197 198 199 200 201 287 288 289 290 291 292 293\n",
" 195 196 197 198 199 200 201 202 288 289 290 291 292 293 294\n",
" 196 197 198 199 200 201 202 203 289 290 291 292 293 294 295\n",
" 197 198 199 200 201 202 203 204 … 290 291 292 293 294 295 296\n",
" 198 199 200 201 202 203 204 205 291 292 293 294 295 296 297\n",
" 199 200 201 202 203 204 205 206 292 293 294 295 296 297 298\n",
" 200 201 202 203 204 205 206 207 293 294 295 296 297 298 299\n",
" 201 202 203 204 205 206 207 208 294 295 296 297 298 299 300"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 2重の内包表記も可能\n",
"fruits_num = [i + j for i in 1:100, j in 101:200]"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 0.6.0",
"language": "julia",
"name": "julia-0.6"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "0.6.0"
},
"latex_envs": {
"LaTeX_envs_menu_present": true,
"autocomplete": true,
"bibliofile": "biblio.bib",
"cite_by": "apalike",
"current_citInitial": 1,
"eqLabelWithNumbers": true,
"eqNumInitial": 1,
"hotkeys": {
"equation": "Ctrl-E",
"itemize": "Ctrl-I"
},
"labels_anchors": false,
"latex_user_defs": false,
"report_style_numbering": false,
"user_envs_cfg": false
},
"toc": {
"colors": {
"hover_highlight": "#DAA520",
"navigate_num": "#000000",
"navigate_text": "#333333",
"running_highlight": "#FF0000",
"selected_highlight": "#FFD700",
"sidebar_border": "#EEEEEE",
"wrapper_background": "#FFFFFF"
},
"moveMenuLeft": true,
"nav_menu": {
"height": "56px",
"width": "254px"
},
"navigate_menu": true,
"number_sections": true,
"sideBar": true,
"threshold": 4,
"toc_cell": true,
"toc_section_display": "block",
"toc_window_display": true,
"widenNotebook": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment