Limite las ocurrencias de cadenas en una lista según el prefijo

PurpJuice

Entonces, el código en el que estoy trabajando es para un bot de IRC y quiero implementar una forma de limitar los canales según la CHANLIMITopción del servidor.

La CHANLIMITopción es una lista de límites con el prefijo y el límite separados por :, pero si no hay nada después, :entonces no hay límite.

La solución a continuación funciona, pero estoy buscando mejoras.

result = ['#+:2', '&:']
channels = ['#test1', '#test2', '+test3', '&test4']

prefix_groups = [(prefix, []) for prefix in result]
channel_groups = {k: v for (k, v) in prefix_groups}
for channel in channels:
    for group in prefix_groups:
        if channel[0] in group[0]:
            channel_groups[group[0]].append(channel)
            break

for prefix, channels in channel_groups.items():
    limit = prefix.split(':')[1]
    if limit:
        if len(channels) > int(limit):
            channel_groups[prefix] = channels[:int(limit)]

channels = [
    channel for chanlist in channel_groups.values() for channel in chanlist]

print(channels)
EvensF

Podemos ir más lejos:

Solucion 2

import itertools

results = ['#+:2', '&:']
channels_to_test = ['#test1', '#test2', '+test3', '&test4',
                    '#test5', '!test5', '&test6', '&test7',
                    '+test8', '#test9']

channel_groups = {group: [channel for channel in channels_to_test
                                  if channel[0] in group]
                  for group in results}

limit = lambda prefix: prefix.split(':')[1]

modified_channel_groups = {prefix: channels[:int(limit(prefix))]
                           for (prefix, channels) in channel_groups.items()
                           if limit(prefix)}

channel_groups.update(modified_channel_groups)

result_channels = list(itertools.chain.from_iterable(channel_groups.values()))

print(result_channels)

Pero aquí tengo que hacer una suposición: supongo que un canal puede coincidir como máximo con un elemento de results. En otras palabras, no hay dos elementos de resultscoincidirán con el mismo canal. Dime si esto no es cierto para tu situación.

Estos son los cambios que hice:

  • He creado channel_groupsusando una comprensión de diccionario donde el valor de cada elemento es una comprensión de lista
  • He creado modified_channel_groupsque contiene los elementos channel_groupsque se han acortado
  • Me actualicé los elementos de channel_groupscon los demodified_channel_groups
  • Creé una expresión lambda para poder incluirla en modified_channel_groupsla definición de.
  • He extraído result_channelsusandoitertools.chain.from_iterable()

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Eliminar las comillas de prefijo de una lista de cadenas

¿Cómo encontrar el número de ocurrencias en la lista de cadenas de ML?

Cómo obtener un prefijo común de cadenas en una lista

Reemplace las ocurrencias de los valores de Enum en una cadena con el índice del valor de Enum para la comparación de cadenas

Filtrar una lista de cadenas según el contenido

Dividir una lista de cadenas según el valor en Java

¿Cómo puedo cambiar el nombre de las cadenas en función de otras cadenas que tienen un prefijo diferente?

Tome la lista de cadenas y divídala según las comas en una lista 2d

Agregue diferentes cadenas a una lista de cadenas según su posición en la lista

Python lista de cadenas, reemplace todas las ocurrencias que no pertenecen a una sublista específica

Lista de Python de ocurrencias frecuentes en una lista de cadenas

Cómo ordenar una lista de objetos según el atributo en las listas

Cuente las ocurrencias de elementos en una matriz con el marco de agregación mongodb

Eliminar el prefijo de una LISTA de archivos en bash

Contar el número de ocurrencias de elemento / valor ocurre en una lista de listas

Contar ocurrencias de cadenas en el archivo

Optimización de las ocurrencias de conteo de una lista de palabras en una cadena determinada (Python)

A partir de una lista, cuente las ocurrencias y cree una nueva lista con el recuento agregado

Cuente el número exacto de co-ocurrencias de elementos en una lista numerosa

Cuente el número exacto de co-ocurrencias de elementos en una lista numerosa

Contando el número de ocurrencias de ints en una lista

Contar el número de ocurrencias en una lista de la misma tortuga

¿Cómo puedo ordenar las letras de una palabra según el orden de las ocurrencias compatibles con Java 7?

Eliminar el prefijo de las cadenas en el marco de datos R

Cómo hacer un diccionario para el número de ocurrencias en una lista

Python: cómo contar el número de ocurrencias en una lista

r studio, ¿cómo contar el número de ocurrencias en una lista usando un bucle for?

Reste todas las tablas de Oracle con el prefijo USER de las tablas con el prefijo ALL en una sola declaración

¿Cómo reemplazar las ocurrencias de cadenas en el archivo Python?

TOP Lista

CalienteEtiquetas

Archivo