'Create sublist from list

I have following list named svc_tk_input

['4505/tcp', '4506/tcp', '80/tcp', '4505/udp', '4506/udp', '80/udp']

and i have following service so defined:

svc_a = [port_x/udp]
svc_b = [port_y/tcp] 

svc_c = [port_x/udp, port_x/tcp] 
svc_d = [port_x/tcp, port_x/udp]

svc_e = [port_y/udp, port_y/tcp] 
svc_f = [port_y/tcp, port_y/udp] 

svc_g = [port_x/tcp, port_y/tcp] 
svc_h = [port_x/udp, port_y/udp]

svc_i = [port_y/tcp, port_x/tcp] 
svc_l = [port_y/udp, port_x/udp]

svc_m = [port_x/tcp, port_y/udp] 
svc_n = [port_x/udp, port_y/tcp]

svc_o = [port_y/tcp, port_x/udp] 
svc_p = [port_y/udp, port_x/tcp]
 

Final target is to see if any service is defined given the port/protocol in svc_tk_input. Idea:

  • create a second list svc_tk_input_mod
  • svc_tk_input_mod list has all combination of input port/protocol
svc_tk_input_mod = [('4505/tcp'), ('4505/udp'), ('4506/tcp'), ('4506/udp'),...,('4505/tcp' ,'4505/udp'), ('4505/tcp' ,'80/udp'),... ] 
  • check at the end if any service is defined (out of scope here and this part is already covered)

I try to create the list svc_tk_input_mod by using itertools permutations but list that i get contains such combination

[('4505/tcp', '4506/tcp', '4505/udp', '4506/udp'), ('4505/tcp', '4506/tcp', '4506/udp', '4505/udp'), ('4505/tcp', '4505/udp', '4506/tcp', '4506/udp'), (...)]

As you can see each single element never can match the definition of service (service is a list of max 2 element) Any suggestion on how can i improve the above?

Update here my code

list_protocols = str(policy_dict[term_name]["protocol"]).split(",") #  (udp tcp)
list_ports = str(policy_dict[term_name][port_item]).split(",") #  (53, 22, 1024-65535)
                        
svc_tk_val_input = [ ]
svc_tk_val_input = build_svc_tk_val_input.build_svc_tk_val(list_protocols, list_ports,svc_tk_val_input) 



                        
svc_tk_val_input_permutation = [ ]
svc_tk_val_input_permutation = build_svc_tk_val_input.build_svc_tk_val_permutation(svc_tk_val_input, svc_tk_val_input_permutation)
svc_tk_val_input_permutation_2 = [ ]
if len(list_ports)>2:
svc_tk_val_input_permutation_2 = 
build_svc_tk_val_input.build_svc_tk_val_permutation_with_len(svc_tk_val_input, svc_tk_val_input_permutation,2)
                        


def build_svc_tk_val(list_protocols, list_ports,svc_tk_val_input):
 for protocol in list_protocols: 
        for port in list_ports:
            ppp_item = port+"/"+protocol
            print(ppp_item)
            # Token that we want
            svc_tk_val_input.append(ppp_item)   
    return  svc_tk_val_input




def build_svc_tk_val_permutation(svc_tk_val_input,svc_tk_val_input_permutation):
   svc_tk_val_permutation = permutations(svc_tk_val_input)  
    for svc_tk_id_item_permutation in list(svc_tk_val_permutation):  
        #print(f"Combination {svc_tk_id_item_permutation}")
        svc_tk_val_input_permutation.append(svc_tk_id_item_permutation)
    return svc_tk_val_input_permutation

def build_svc_tk_val_permutation_with_len(svc_tk_val_input,svc_tk_val_input_permutation,permutation_len):
    
  
    svc_tk_val_permutation = permutations(svc_tk_val_input,permutation_len)  
    for svc_tk_id_item_permutation in list(svc_tk_val_permutation):  
        #print(f"Combination {svc_tk_id_item_permutation}")
        svc_tk_val_input_permutation.append(svc_tk_id_item_permutation)
    return svc_tk_val_input_permutation


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source