gpt4 book ai didi

python - 根据前缀限制列表中字符串的出现

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:44 25 4
gpt4 key购买 nike

所以我正在处理的代码是针对 IRC 机器人的,我想实现一种基于 CHANLIMIT 服务器选项来限制 channel 的方法。

CHANLIMIT 选项是一个限制列表,前缀和限制由 : 分隔,但如果 : 之后没有任何内容,则没有限制。

下面的解决方案有效,但我正在寻求任何改进。

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)

最佳答案

我们可以走得更远:

方案二

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)

但在这里我必须做一个假设:我假设一个 channel 最多可以匹配results的一个元素。换句话说,results 的任何两个元素都不会匹配同一个 channel 。告诉我这是否不适合您的情况。

以下是我所做的更改:

  • 我使用字典理解创建了 channel_groups,其中每个元素的值都是列表理解
  • 我创建了 modified_channel_groups,其中包含已缩短的 channel_groups 元素
  • updated channel_groups 的元素与 modified_channel_groups
  • 的元素
  • 我创建了一个 lambda expression这样我就可以将它包含在 modified_channel_groups 的定义中。
  • 我已经使用 itertools.chain.from_iterable() 提取了 result_channels

关于python - 根据前缀限制列表中字符串的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53797322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com