Skip to content

Instantly share code, notes, and snippets.

@zeehio
Created November 25, 2013 11:32
Show Gist options
  • Save zeehio/7639994 to your computer and use it in GitHub Desktop.
Save zeehio/7639994 to your computer and use it in GitHub Desktop.
Buscar elements i índexs a llistes i np.arrays
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Buscar elements en `list` i `numpy.array` obtenint valors i/o \u00edndexs"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Definim una llista:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"una_llista = [25, 35, 45, 55, 65, 75]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## En llistes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###Saber si un valor est\u00e0 present"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"if 45 in una_llista:\n",
" print \"El 45 est\u00e0 present.\"\n",
"else:\n",
" print \"El 45 no est\u00e0 present.\"\n",
"\n",
"# Podem fer la pregunta al rev\u00e9s:\n",
"if 50 not in una_llista:\n",
" print \"El 50 no est\u00e0 present.\"\n",
"else:\n",
" print \"El 50 est\u00e0 present.\""
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"El 45 est\u00e0 present.\n",
"El 50 no est\u00e0 present.\n"
]
}
],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Buscar valors"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Busquem els elements de llista m\u00e9s grans de 50. Ho fem mitjan\u00e7ant una \"list comprenhension\":"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"elements_grans = [x for x in una_llista if x > 50]\n",
"print elements_grans"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[55, 65, 75]\n"
]
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Equival al seg\u00fcent bucle:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"elements_grans2 = []\n",
"for x in una_llista:\n",
" if x > 50:\n",
" elements_grans2.append(x)\n",
"print elements_grans2\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[55, 65, 75]\n"
]
}
],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Buscar \u00edndex:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Busquem els \u00edndex de la llista:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"elements_grans_index = [i for i,x in enumerate(una_llista) if x > 50]\n",
"print elements_grans_index\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[3, 4, 5]\n"
]
}
],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Equival al seg\u00fcent bucle:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"elements_grans_index2 = []\n",
"for i, x in enumerate(una_llista):\n",
" if x > 50:\n",
" elements_grans_index2.append(i)\n",
"print elements_grans_index2\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[3, 4, 5]\n"
]
}
],
"prompt_number": 6
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`enumerate(una_llista)` retorna una tupla (index, valor) per cada element de una_llista. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Per\u00f2 en cap cas es pot fer aix\u00ed:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print una_llista == 50 # La llista sencera no \u00e9s igual a un nombre!!"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"False\n"
]
}
],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print una_llista < 50 # Tampoc t\u00e9 sentit, pot tornar True o False arbitr\u00e0riament."
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"False\n"
]
}
],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## En `numpy.array`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Definim un array de numpy:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"el_meu_array = np.array(una_llista)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 9
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Saber si un element est\u00e0 o no present:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"if 45 in el_meu_array:\n",
" print \"El 45 est\u00e0 al array\"\n",
"else:\n",
" print \"El 45 no est\u00e0 al array\"\n",
"\n",
"# Podem fer la pregunta al rev\u00e9s:\n",
"if 50 not in el_meu_array:\n",
" print \"El 50 est\u00e0 al array\"\n",
"else:\n",
" print \"El 50 no est\u00e0 al array\"\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"El 45 est\u00e0 al array\n",
"El 50 est\u00e0 al array\n"
]
}
],
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Buscar elements:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Els array de numpy s\u00f3n m\u00e9s intu\u00eftius: Obtenim un array de numpy amb True/False per cada element"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"el_meu_array == 50"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 11,
"text": [
"array([False, False, False, False, False, False], dtype=bool)"
]
}
],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"el_meu_array > 50"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 12,
"text": [
"array([False, False, False, True, True, True], dtype=bool)"
]
}
],
"prompt_number": 12
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A m\u00e9s podem indexar amb aquests arrays:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"array_veritat_fals = el_meu_array > 50\n",
"print el_meu_array[array_veritat_fals]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[55 65 75]\n"
]
}
],
"prompt_number": 13
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"O combinant les dues expressions anteriors:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print el_meu_array[el_meu_array > 50]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[55 65 75]\n"
]
}
],
"prompt_number": 14
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Buscar \u00edndexs:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La funci\u00f3 `numpy.where` ens demana un array de veritat/fals i ens diu (en la component 0) els \u00edndexs \"veritat\":"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"array_veritat_fals = el_meu_array > 50\n",
"index_buscats = np.where(array_veritat_fals)[0]\n",
"print el_meu_array\n",
"print index_buscats"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[25 35 45 55 65 75]\n",
"[3 4 5]\n"
]
}
],
"prompt_number": 15
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ho posem tot junt:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print np.where(el_meu_array > 50)[0]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[3 4 5]\n"
]
}
],
"prompt_number": 16
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment