<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Andrés Howard</title>
    <description>The latest articles on Forem by Andrés Howard (@ahowardm).</description>
    <link>https://forem.com/ahowardm</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F74000%2Fbc3f4e46-cbd3-488c-b4b9-fff79ea1dced.png</url>
      <title>Forem: Andrés Howard</title>
      <link>https://forem.com/ahowardm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ahowardm"/>
    <language>en</language>
    <item>
      <title>Ruby on Rails en Windows con WSL2</title>
      <dc:creator>Andrés Howard</dc:creator>
      <pubDate>Fri, 26 May 2023 13:25:47 +0000</pubDate>
      <link>https://forem.com/ahowardm/ruby-on-rails-en-windows-con-wsl2-73o</link>
      <guid>https://forem.com/ahowardm/ruby-on-rails-en-windows-con-wsl2-73o</guid>
      <description>&lt;p&gt;Cómo podemos programar en Ruby on Rails usando Windows?: la respuesta es usando Windows Subsystem for Linux.&lt;/p&gt;

&lt;p&gt;A continuación vamos a instalar WSL2 (Windows Subsystem for Linux v2) en Windows 10/11. Esto nos permitirá trabajar con Ruby on Rails de manera más fácil que usando una máquina virtual en VirtualBox, por ejemplo.&lt;/p&gt;

&lt;p&gt;Vamos a seguir los siguientes pasos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Instalar WSL2&lt;/li&gt;
&lt;li&gt;Instalar PostgreSQL&lt;/li&gt;
&lt;li&gt;Instalar NodeJS&lt;/li&gt;
&lt;li&gt;Instalar Ruy on Rails&lt;/li&gt;
&lt;li&gt;Material Adicional&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  1. Instalar WSL2 &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Referencia: &lt;a href="https://learn.microsoft.com/es-es/windows/wsl/install"&gt;https://learn.microsoft.com/es-es/windows/wsl/install&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ejecuta la aplicación &lt;code&gt;powershell&lt;/code&gt; en modo administrador. Para esto búscala en el menú inicio y haz click derecho o en la opciones que aparecen a la derecha en la opción &lt;em&gt;Ejecutar como administrador.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Ejecuta &lt;code&gt;wsl --install&lt;/code&gt; . Esto va a instalar WSL, por lo que toma un buen tiempo.&lt;/li&gt;
&lt;li&gt;Verifica que la versión de WSL instalada es la 2, para esto ejecuta en &lt;code&gt;powershell&lt;/code&gt; el comando &lt;code&gt;wsl -l -v&lt;/code&gt;. Si es la versión 2 estamos ok, si es la 1 entonces entra al link de referencia y busca cómo actualizar. &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  2. Instalar PostgreSQL &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Referencia: &lt;a href="https://www.cybertec-postgresql.com/en/postgresql-on-wsl2-for-windows-install-and-setup/"&gt;https://www.cybertec-postgresql.com/en/postgresql-on-wsl2-for-windows-install-and-setup/&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ejecuta la aplicación &lt;code&gt;Ubuntu&lt;/code&gt;. La puedes encontrar en el menú inicio o en el buscador. Esto te va a abrir un terminal de Linux en tu computador. De la distribución Ubuntu.&lt;/li&gt;
&lt;li&gt;Ejecuta los siguientes comandos:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="s1"&gt;'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" &amp;gt; /etc/apt/sources.list.d/pgdg.list'&lt;/span&gt;
&lt;span class="n"&gt;wget&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;quiet&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="no"&gt;O&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="ss"&gt;:/&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;postgresql&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;org&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;media&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;keys&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="no"&gt;ACCC4CF8&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;asc&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;apt&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;postgresql&lt;/span&gt; &lt;span class="n"&gt;postgresql&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;contrib&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Verifica la version de PostgreSQL que tienes instalada ejecutando &lt;code&gt;psql --version&lt;/code&gt;. Si te aparece un mensaje mostrando la versión estás ok, si te dice que no reconoce qué es &lt;code&gt;psql&lt;/code&gt; entonces debes revisar si hubo algún error en el proceso.&lt;/li&gt;
&lt;li&gt;Verifica que PostgreSQL está corriendo ejecutando &lt;code&gt;sudo service postgresql status&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Si dice que el estado es &lt;code&gt;down&lt;/code&gt; entonces ejecuta &lt;code&gt;sudo service postgresql start&lt;/code&gt; para iniciarlo. Después de esto si verificas el status nuevamente debería decir &lt;code&gt;up&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  3. Instalar NodeJS &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Referencia: &lt;a href="https://learn.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-wsl"&gt;https://learn.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-wsl&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ejecuta la aplicación &lt;code&gt;Ubuntu&lt;/code&gt;. Ejecuta el siguiente comando para instalar &lt;em&gt;curl&lt;/em&gt;: &lt;code&gt;sudo apt-get install curl&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Instala &lt;em&gt;nvm&lt;/em&gt; (Node Version Manager), este programa te permite tener distintas versiones de NodeJS instaladas y seleccionar cuál es la que quieres usar. Para esto ejecuta &lt;code&gt;curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Verifica que la instalación sea exitosa ejecutando &lt;code&gt;command -v nvm&lt;/code&gt;. Si muestra &lt;em&gt;nvm&lt;/em&gt; está todo ok, si te dice &lt;em&gt;command not found&lt;/em&gt; entonces debes cerrar &lt;code&gt;Ubuntu&lt;/code&gt; y abrirlo nuevamente (esto para que recargue las variables de ambiente).&lt;/li&gt;
&lt;li&gt;Revisa qué versiones de NodeJS tienes instaladas ejecutando &lt;code&gt;nvm ls&lt;/code&gt;. Te debería aparecer algo así:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--f2WgFw9C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aanctz4czn3sh4qlwif7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--f2WgFw9C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aanctz4czn3sh4qlwif7.png" alt="Versiones de NodeJS instaladas" width="800" height="411"&gt;&lt;/a&gt;&lt;br&gt;
Fuente: &lt;a href="https://learn.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-wsl"&gt;https://learn.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-wsl&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Instala la versión de NodeJS que usamos ejecutando &lt;code&gt;nvm install 19.9.0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Verifica que tienes instalada la versión ejecutando &lt;code&gt;node --version&lt;/code&gt; y te debería salir una pantalla similar a la anterior pero con un asterisco al lado de 19.9.0. El asterisco significa que ésa es la que estás usando actualmente.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  3.1 Instalar yarn
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;yarn&lt;/code&gt; es un gestor de dependencias de NodeJS tal como &lt;code&gt;npm&lt;/code&gt;. Suele ser muy usado como alternativa a &lt;code&gt;npm&lt;/code&gt; por temas de eficiencia, entre otros. Para instalarlo debes ejecutar &lt;code&gt;npm install --global yarn&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Instalar Ruby on Rails en WSL2 &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Referencia: &lt;a href="https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-git"&gt;https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-git&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Abre la aplicación &lt;code&gt;Ubuntu&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Actualiza la información de los programas que estás disponibles para instalar ejecutando &lt;code&gt;sudo apt-get update&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Instala las dependencias de Ruby ejecutando &lt;code&gt;sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common libffi-dev&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Instala rbenv para manejar las versiones de ruby que puedas tener instaladas. Para esto:

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;git clone https://github.com/rbenv/rbenv.git ~/.rbenv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;echo 'export PATH="$HOME/.rbenv/bin:$PATH"' &amp;gt;&amp;gt; ~/.bashrc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;echo 'eval "$(rbenv init -)"' &amp;gt;&amp;gt; ~/.bashrc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;exec $SHELL&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;Instala la versión 3.2.0 de ruby:

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' &amp;gt;&amp;gt; ~/.bashrc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;exec $SHELL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rbenv install 3.2.0&lt;/code&gt; (este paso es lento, toma varios minutos)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rbenv global 3.2.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Verifica que esté todo ok ejecutando &lt;code&gt;ruby -v&lt;/code&gt; y debería decir que estás usando la versión &lt;em&gt;3.2.0&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;Instala &lt;em&gt;Bundler&lt;/em&gt; ejecutando:

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;gem install bundler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rbenv rehash&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;Instala la última versión de Ruby on Rails:

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;gem install rails&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rbenv rehash&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Verifica la versión ejecutando &lt;code&gt;rails -v&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Material adicional &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Un (muy buen) tutorial alternativo: &lt;a href="https://gorails.com/setup/windows/10#ruby-rbenv"&gt;https://gorails.com/setup/windows/10#ruby-rbenv&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Cómo configurar git en WSL2: &lt;a href="https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-git"&gt;https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-git&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>wsl2</category>
      <category>rails</category>
      <category>win10</category>
      <category>ruby</category>
    </item>
    <item>
      <title>Cómo usar listas de listas en Python?</title>
      <dc:creator>Andrés Howard</dc:creator>
      <pubDate>Wed, 15 Sep 2021 21:50:13 +0000</pubDate>
      <link>https://forem.com/ahowardm/como-usar-listas-de-listas-en-python-2g9m</link>
      <guid>https://forem.com/ahowardm/como-usar-listas-de-listas-en-python-2g9m</guid>
      <description>&lt;p&gt;En Python una &lt;code&gt;lista&lt;/code&gt; es un contenedor que puede almacenar datos de cualquier tipo, incluso puede almacenar datos de diferentes tipos. Así, una lista puede contener strings, ints, floats, etc.&lt;/p&gt;

&lt;p&gt;Por lo tanto, nada nos prohibe que almacenar dentro de una lista otras listas, de manera que tendríamos una lista con listas adentro. Ésto es lo que conocemos como listas de listas o listas anidadas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creación de listas anidadas
&lt;/h2&gt;

&lt;p&gt;Para crear una lista anidada tenemos que definir una variable de tipo &lt;code&gt;list&lt;/code&gt; y en cada una de sus posiciones guardar una lista, como en el ejemplo a continuación&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;mi_lista&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="s"&gt;'a'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'b'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'c'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'d'&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para acceder a los valores de la lista es igual que en las listas normales pero ahora vamos a usar dos índices: uno para cada lista.&lt;/p&gt;

&lt;p&gt;En el ejemplo anterior, al acceder a &lt;code&gt;mi_lista[0]&lt;/code&gt; lo que vamos a hacer es obtener lo que está almacenado en la posición cero, es decir la lista &lt;code&gt;['a', 'b']&lt;/code&gt;. Luego, si queremos acceder a la segunda letra (que sabemos que es la posición 1) usando la notación de corchetes de Python haríamos &lt;code&gt;&amp;lt;nombre_variable&amp;gt;[1]&lt;/code&gt;. Es decir, para acceder a la letra 'b' tenemos que hacer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;lista_cero&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mi_lista&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;letra_b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lista_cero&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Obviamente esto es muy ineficiente y lo podemos hacer en un paso usando dos índices de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;letra_b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mi_lista&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;De esta manera, podemos crear listas anidadas en Python que nos permiten almacenar datos más complejos que las listas normales.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recorrer una lista de listas
&lt;/h2&gt;

&lt;p&gt;Es muy común querer recorrer una lista de listas revisando cada uno de sus valores ya sea para modificarlos o para buscar alguno específico. Para esto, lo que tenemos que hacer es generar ciclos para cada nivel de listas que queramos recorrer.&lt;/p&gt;

&lt;p&gt;Pensemos que tenemos la siguiente lista:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;mi_lista&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vamos a recorrerla completa para modificar sus valores de la siguiente manera: todos los 1 los vamos a cambiar por 0 y los 0 por 1.&lt;/p&gt;

&lt;p&gt;Para esto, lo primero que tenemos que hacer es definir la estrategia para recorrer la lista.&lt;/p&gt;

&lt;p&gt;Si vemos bien, lo que tenemos es una lista en la que en cada posición tiene una lista, por lo que tenemos dos niveles (cada valor pertenece a dos listas, no más ni menos). Por lo tanto con dos ciclos vamos a ser capaces de recorrer todos los valores.&lt;/p&gt;

&lt;p&gt;En primer lugar recorramos la lista exterior (llamada &lt;code&gt;mi_lista&lt;/code&gt;) usando un ciclo &lt;code&gt;for&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mi_lista&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En cada iteración lo que vamos a tener es una nueva lista (&lt;code&gt;mi_lista[i]&lt;/code&gt;) que tenemos que recorrer por lo tanto tenemos que definir un nuevo ciclo for para recorrer esa segunda lista&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mi_lista&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mi_lista&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]):&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con lo anterior estamos recorriendo todos los valores de la lista, de hecho basta con poner un &lt;code&gt;print&lt;/code&gt; dentro del &lt;em&gt;loop&lt;/em&gt; anterior para darnos cuenta que vamos a imprimir todos los valores. El código sería el siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mi_lista&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mi_lista&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])):&lt;/span&gt;
        &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mi_lista&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Volviendo a nuestro ejemplo, lo que queremos hacer es intercambiar los 0 con los 1, por lo tanto vamos a usar condiciones para modificar los valores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Si el valor actual es 1 entonces lo cambio por 0,&lt;/li&gt;
&lt;li&gt;Si el valor actual es 0 entonces lo cambio por 1.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esto lo hacemos de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mi_lista&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mi_lista&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;mi_lista&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;mi_lista&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;mi_lista&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;mi_lista&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Resumen
&lt;/h2&gt;

&lt;p&gt;Vimos que Python nos permite definir listas anidadas para trabajar con datos más complejos y que podemos recorrerlas usando ciclos para modificar sus valores.&lt;/p&gt;

&lt;p&gt;En el ejemplo que vimos recorrimos la lista completa, pero es común también querer recorrer la lista en dsitinto orden. Por ejemplo por filas o por columnas, y no toda la lista de corrido.&lt;/p&gt;

</description>
      <category>python</category>
      <category>lists</category>
      <category>espanol</category>
    </item>
  </channel>
</rss>
