An Elementary Introduction to the Wolfram Language
30Reorganización de listas
Muchas veces se quiere reorganizar una lista que se haya generado en algún proceso, antes de poder utilizarla en otro. Por ejemplo, puede tenerse una lista de pares que se necesite convertir a un par de listas, o viceversa.
In[1]:=
Click for copyable input
Out[1]=
Transponga de nuevo el par de listas para obtener una lista de pares:
In[2]:=
Click for copyable input
Out[2]=
Thread es una operación estrechamente relacionada con la anterior, que sirve, entre otras, para generar una entrada para Graph.
Enhebrar a través de los elementos de dos listas:
In[3]:=
Click for copyable input
Out[3]=
Partition toma una lista y la particiona en bloques de un tamaño especificado.
Particione una lista con 12 elementos en bloques de tamaño 3:
In[4]:=
Click for copyable input
Out[4]=
In[5]:=
Click for copyable input
Out[5]=
Si no se especifica lo contrario, Partition descompone una lista en bloques que no se traslapen. Sin embargo, puede pedirse que la lista se descomponga en bloques que permitan un traslape mediante un desplazamiento especificado en la lista.
In[6]:=
Click for copyable input
Out[6]=
In[7]:=
Click for copyable input
Out[7]=
En vez de lo anterior, use un desplazamiento de 2:
In[8]:=
Click for copyable input
Out[8]=
Partition toma una lista y la descompone en sublistas. Flatten aplana las sublistas.
Forme una lista de las listas de los dígitos de enteros consecutivos:
In[9]:=
Click for copyable input
Out[9]=
Obtenga la versión aplanada:
In[10]:=
Click for copyable input
Out[10]=
Produzca un gráfico con la secuencia de dígitos:
In[11]:=
Click for copyable input
Out[11]=
Normalmente, Flatten aplana en todos los niveles de una lista. Sin embargo, muchas veces se querría aplanar, por ejemplo, solo un nivel de la lista. Aquí se forma una tabla de 4×4, donde cada elemento es, a su vez, una lista.
Forme una lista de listas de listas:
In[12]:=
Click for copyable input
Out[12]=
In[13]:=
Click for copyable input
Out[13]=
Aplane solo un nivel de la lista:
In[14]:=
Click for copyable input
Out[14]=
ArrayFlatten es una generalización de Flatten, que toma arreglos de arreglos y los aplana para hacer arreglos individuales.
Aquí se genera una estructura con anidación profunda que resulta difícil de comprender:
In[15]:=
Click for copyable input
Out[15]=
ArrayFlatten la convierte en una estructura un poco más fácil de entender:
In[16]:=
Click for copyable input
Out[16]=
Con ArrayPlot, es considerablemente más sencillo darse cuenta de lo que está sucediendo:
In[17]:=
Click for copyable input
Out[17]=
In[18]:=
Click for copyable input
Out[18]=
Hay muchas otras maneras de reorganizar listas. Por ejemplo, Split subdivide una lista en secuencias de elementos idénticos.
Subdivida una lista en secuencias de elementos idénticos consecutivos:
In[19]:=
Click for copyable input
Out[19]=
Gather, por otro lado, agrupa los elementos que sean idénticos, dondequiera que éstos aparezcan.
Agrupe en listas los elementos idénticos:
In[20]:=
Click for copyable input
Out[20]=
GatherBy agrupa los elementos según el resultado de aplicar una función a cada uno. Ahora, se usa LetterQ, de modo tal que agrupa por separado los caracteres que son letras y los que no lo son.
Agrupe los caracteres según sean letras o no lo sean:
In[21]:=
Click for copyable input
Out[21]=
SortBy ordena según el resultado de aplicar una función.
Sort normalmente ordena las listas cortas antes de las más largas:
In[22]:=
Click for copyable input
Out[22]=
Ahora se le pide a SortBy que haga el ordenamiento de acuerdo al primer elemento de cada lista:
In[23]:=
Click for copyable input
Out[23]=
Sort ordena una lista. Union, además, elimina los elementos repetidos.
Encuentre en una lista todos los elementos que sean distintos:
In[24]:=
Click for copyable input
Out[24]=
Se puede usar Union para encontrar la unión de los elementos que aparezcan en cualesquiera de varias listas.
Obtenga la lista de todos los elementos que aparezcan en cualquiera de las listas:
In[25]:=
Click for copyable input
Out[25]=
In[26]:=
Click for copyable input
Out[26]=
In[27]:=
Click for copyable input
Out[27]=
In[28]:=
Click for copyable input
Out[28]=
Las letras que aparecen en el sueco, pero no en el inglés:
In[29]:=
Click for copyable input
Out[29]=
Otra de las muchas funciones que se pueden aplicar a las listas es Riffle, que intercala cosas entre los elementos sucesivos de una lista.
Intercale x entre los elementos de una lista:
In[30]:=
Click for copyable input
Out[30]=
Intercale -- entre una lista de caracteres:
In[31]:=
Click for copyable input
Out[31]=
Junte todo lo anterior en una sola lista de caracteres:
In[32]:=
Click for copyable input
Out[32]=
Las funciones tales como Partition sirven para tomar una lista y descomponerla en sublistas. En vez de eso, a veces se parte de una colección de elementos para formar listas con ellos.
Permutations obtiene todos los ordenamientos posibles, o permutaciones, de una lista.
Genere una lista de los 3!=3×2×1=6 ordenamientos posibles de 3 elementos:
In[33]:=
Click for copyable input
Out[33]=
In[34]:=
Click for copyable input
Out[34]=
Tuples toma una lista de elementos y genera todas las combinaciones posibles de un número dado de dichos elementos.
Genere una lista de todas las ternas posibles de rojo y verde:
In[35]:=
Click for copyable input
Out[35]=
RandomChoice sirve para hacer una elección aleatoria a partir de los elementos de una lista.
Haga una elección aleatoria a partir de los elementos de una lista:
In[36]:=
Click for copyable input
Out[36]=
Haga una lista de 20 elecciones aleatorias:
In[37]:=
Click for copyable input
Out[37]=
Haga 5 listas de 3 elecciones aleatorias:
In[38]:=
Click for copyable input
Out[38]=
RandomSample obtiene una muestra aleatoria de elementos de una lista, sin seleccionar más de una vez ningún elemento.
Elija 20 elementos en el tramo de 1 a 100, sin que aparezca ningún elemento repetido:
In[39]:=
Click for copyable input
Out[39]=
Si no se indica cuántos elementos se han de elegir, se obtiene un ordenamiento aleatorio de la lista completa:
In[40]:=
Click for copyable input
Out[40]=
30.1Use Thread para formar una lista de reglas que liguen cada letra del alfabeto inglés con su posición en el alfabeto. »
Salida esperada:
Out[]=
30.2Haga una rejilla de 4×6 con las 24 primeras letras del alfabeto inglés. »
Salida esperada:
Out[]=
30.3Forme una rejilla con los dígitos en 2^1000, con 50 dígitos en cada renglón y con un marco en todos los casos. »
Salida esperada:
Out[]=
30.4Forme una rejilla con los 400 primeros caracteres del artículo computers en Wikipedia, con 20 caracteres por renglón y con un marco en todos los casos. »
Muestra de salida esperada:
Out[]=
Salida esperada:
Out[]=
Salida esperada:
Out[]=
Salida esperada:
Out[]=
30.8Encuentre las longitudes más largas entre las secuencias de dígitos idénticos en 2^n, con n hasta 100. »
Salida esperada:
Out[]=
30.9Tome los nombres de los enteros hasta el 100, y agrúpelos en sublistas con acuerdo a sus letras iniciales. »
Salida esperada:
Out[]=
30.10Ordene las 50 primeras palabras en WordList[ ] según la última letra. »
Muestra de salida esperada:
Out[]=
30.11Haga una lista de los 20 primeros cuadrados, ordenada por sus primeros dígitos. »
Salida esperada:
Out[]=
30.12Ordene los enteros hasta el 20, según las longitudes de sus nombres en inglés. »
Salida esperada:
Out[]=
30.13Obtenga una muestra aleatoria de 20 palabras de WordList[ ], y agrúpelas en sublistas, de acuerdo con el número de sus caracteres. »
Muestra de salida esperada:
Out[]=
30.14Encuentre las letras que aparecen en el alfabeto ucraniano, pero no en el ruso. »
Salida esperada:
Out[]=
30.15Use Intersection para encontrar los números que aparecen tanto en los 100 primeros cuadrados como en los 100 primeros cubos. »
Salida esperada:
Out[]=
Salida esperada:
Out[]=
30.17Haga una rejilla donde aparezcan en columnas consecutivas todas las permutaciones posibles de los números 1 al 4. »
Salida esperada:
Out[]=
30.18Haga una lista de todas las diferentes cadenas de caracteres que pueden obtenerse permutando los caracteres en hello»
Salida esperada:
Out[]=
30.19Obtenga un gráfico de arreglo de la secuencia de tuplas de tamaño 5, con el 0 y el 1. »
Salida esperada:
Out[]=
30.20Genere una lista de 10 secuencias aleatorias de 5 letras del alfabeto inglés. »
Muestra de salida esperada:
Out[]=
30.21Encuentre una forma más sencilla para Flatten[Table[{i, j, k}, {i, 2}, {j, 2}, {k, 2}], 2]. »
Salida esperada:
Out[]=
+30.1Produzca un gráfico de arreglo con los números de las letras en los 1000 primeros caracteres del artículo computers en Wikipedia, con 30 letras en cada renglón. »
Muestra de salida esperada:
Out[]=
+30.2Agrupe los enteros hasta el 30 en listas basadas en sus valores módulo 3. »
Salida esperada:
Out[]=
+30.3Agrupe las 50 primeras potencias de 2 de acuerdo con el valor de sus últimos dígitos. »
Salida esperada:
Out[]=
+30.4Obtenga un gráfico con los puntos unidos con el resultado de ordenar los números del 10 al +10, según sus valores absolutos. »
Salida esperada:
Out[]=
+30.5Produzca un gráfico con los puntos unidos de los 200 primeros cuadrados, ordenados por sus dígitos iniciales. »
Salida esperada:
Out[]=
+30.6Produzca el gráfico con los puntos unidos de los enteros hasta el 200, ordenados según las longitudes de sus nombres en inglés. »
Salida esperada:
Out[]=
+30.7Obtenga una muestra aleatoria de 25 palabras de WordList[]»
Muestra de salida esperada:
Out[]=
+30.8Intercale puntos en la cadena de caracteres UNCLE para obtenerU.N.C.L.E.»
Salida esperada:
Out[]=
+30.9Encuentre las letras que aparecen en sueco o en polaco, pero no en inglés. »
Salida esperada:
Out[]=
+30.10Encuentre los países que pertenecen a la World Health Organization pero no a las Naciones Unidas. »
Salida esperada:
Out[]=
+30.11Haga la lista de todas las mezclas de dos de los colores rojo, verde y azul. »
Salida esperada:
Out[]=
+30.12Haga una lista de gráficos de arreglo, cada uno con 50 renglones y tamaño de imagen 50, de las tuplas sucesivas de tamaño 8, con el 0 y el 1. »
Salida esperada:
Out[]=
+30.13Genere 1000 secuencias aleatorias de 4 letras, y hacer la lista de aquellas que aparezcan en WordList[ ].  »
Muestra de salida esperada:
Out[]=
¿Cómo funciona Partition cuando los bloques no encajan perfectamente?
  • Transpose puede verse como la transposición de filas y columnas en una matriz.
  • ArrayFlatten aplana un arreglo de arreglos para dejar un solo arreglo o, alternativamente, para dejar una matriz de matrices en una sola matriz.
  • DeleteDuplicates[lista] hace lo mismo que Union[lista], salvo que no reordena los elementos.
 
Download Notebook Version
en