Saltar al contenido

Obtener elementos que no están en una lista.

Este equipo de trabajo ha estado horas investigando soluciones a tus preguntas, te ofrecemos la respuesta por eso nuestro deseo es serte de mucha ayuda.

Solución:

Una implementación más simple con expl3. Se pueden agregar interfaces adicionales para extraer elementos de listas o recorrerlos.

documentclassarticle
%usepackagexparse % not needed with LaTeX 2020-10-01 or later

ExplSyntaxOn

%% first an interface to manage clists

NewDocumentCommandclistsetmm
 
  clist_clear_new:c  l__cislist_#1_clist 
  clist_set:cn  l__cislist_#1_clist   #2 
 

NewDocumentCommandclistcomplementmmO1m
 % #1 = list to set, #2 = list to take from, #3 = start, #4 = end
  clist_clear_new:c  l__cislist_#1_clist 
  int_step_inline:nnn  #3   #4 
   
    clist_if_in:cnF  l__cislist_#2_clist   ##1 
     % if the current number doesn't belong to the second list, add to the first
      clist_put_right:cn  l__cislist_#1_clist   ##1 
     
   
 

NewDocumentCommandclistusemm
 % #1 = list, #2 = separator
  clist_use:cn  l__cislist_#1_clist   #2 
 

ExplSyntaxOff

begindocument

clistsetfirst25,   76,38,  19,  58,29,88,44,  22,  11,  34,  17

clistcomplementsecondfirst25

clistcomplementthirdfirst[18]36

clistusesecond, 

clistusethird--

enddocument

los clistcomplement El comando tiene un tercer argumento opcional para establecer el punto de partida (predeterminado 1).

ingrese la descripción de la imagen aquí

Después Main está definido, creo 25 macros z1, z2, … que contiene los números 1, 2

Entonces leí Main en un array lista mynums.

Luego configuré un bucle, y para cada elemento en el mynums array, si es menor que 26, redefiní el correspondiente z? valor a nada. Entonces, por ejemplo, si el mynums array valor fueron 11Yo redefiní z11 a nada.

Luego, recorro la lista revisada de z1, z2, … y concatenar cada valor a un string newlist, agregando una coma entre los elementos de la lista, según sea necesario.

El resultado final, por tanto, reside en newlist.

EDITADO para ponerlo todo en un macro getmissingnumbers.

documentclassarticle
usepackagelistofitems,pgffor
makeatletter
newcommandgetmissingnumbers[1]%
 foreachz in1,...,25%
   expandaftergdefcsname zzexpandafterendcsnameexpandafterz%
 %
 readlist*mynums#1%
 foreachitemzinmynums[]%
   ifnumz<26relax
      expandaftergdefcsname zzendcsname%
   fi
 %
 gdefnewlist%
 foreachz in1,...,25%
   ifrelaxcsname zzendcsnamerelaxelse
     ifrelaxnewlistrelaxelse[email protected]
@macronewlist,fi expandafter[email protected]@macroexpandafternewlistexpandafter% csname zzendcsname% fi % makeatother begindocument defMain25, 76,38, 19, 58,29,88,44, 22, 11, 34, 17 getmissingnumbersMain newlist enddocument

ingrese la descripción de la imagen aquí

A continuación se proporciona una macro llamado getmissingelements.

getmissingelements tomará dos argumentos obligatorios seguidos de un argumento opcional que especifica el rango de números para su lista (por defecto es 1-25).

Los dos argumentos obligatorios son los macro en el que se debe almacenar el resultado y la lista principal.

También tiene una variante destacada que expandirá la lista una vez (para que pueda usar Main sin la necesidad de expandafter eso).

Funciona estableciendo primero una secuencia para contener la lista proporcionada, luego recorre el rango de números enteros y verifica si el número entero está en la secuencia. Si no es así, ese entero se agrega a una lista temporal separada por comas. Después de recorrer los números enteros, el usuario proporcionó macro se establecerá en el contenido de la lista separada por comas. Todo excepto la asignación final al usuario especificado macro se realiza localmente en grupo.

documentclass[]article

ExplSyntaxOn
NewDocumentCommand getmissingelements  s m m >SplitArgument1-O1-25 
  
    IfBooleanTF #1
       cis_get_missing_elements:Nnno 
       cis_get_missing_elements:Nnnn 
      #2 #4 #3
  
msg_new:nnn  cis   missing-value   Missing~value.~Aborting! 
cs_new_protected:Npn cis_get_missing_elements:Nnnn #1#2#3#4
  
    tl_if_novalue:nTF #3
       msg_error:nn  cis   missing-value  
      
        group_begin:
          seq_clear:N l_tmpa_seq
          clist_clear:N l_tmpa_clist
          seq_set_from_clist:Nn l_tmpa_seq #4
          int_step_inline:nnn #2 #3
            
              seq_if_in:NnF l_tmpa_seq ##1
                
                  clist_put_right:Nn l_tmpa_clist ##1
                
            
          exp_args:NNNV
        group_end:
        cs_set:Npn #1 l_tmpa_clist
      
  
cs_generate_variant:Nn cis_get_missing_elements:Nnnn  Nnno 
ExplSyntaxOff

defMain0,1,2,3,4,5,  10,11,  20,21

begindocument
getmissingelementscistmp25,   76,38,  19,  58,29,88,44,  22,  11,  34,  17
cistmp

getmissingelements*cistmpMain
cistmp

% braces around `-2' to hide the minus from the argument splitting
getmissingelements*cistmpMain[-2-7]
cistmp
enddocument

ingrese la descripción de la imagen aquí

Si crees que te ha sido de provecho nuestro artículo, nos gustaría que lo compartas con otros seniors de este modo contrubuyes a dar difusión a nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *