You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:移除带不同后缀的列表重复项(WebSocket连接场景)

解决WebSocket连接列表按唯一前缀去重并保留首次出现项的问题

首先明确你的核心需求:在WebSocket ping测试场景中,你需要从一堆带不同后缀(/、/ws、/wss)的连接地址里,为每个唯一前缀保留列表中第一次出现的那个地址,最终得到一个无重复前缀的连接列表,用来测试延迟。

问题示例

输入列表:

['asdf/ws', 'abc/abc/', 'asdf/wss', 'asdf/', 'ab/wss', 'ab/ws', 'abc/abc/ws', 'xyz/wss']

期望输出:

['asdf/ws', 'abc/abc/', 'ab/wss', 'xyz/wss']

需求拆解

  • 后缀固定为三种:/、/ws、/wss
  • 前缀是去掉后缀后的部分,前缀可能包含多个斜杠(比如abc/abc/去掉后缀/后,前缀是abc/abc)
  • 必须保留每个前缀在原列表中最左侧首次出现的对应连接

解决方案(Python实现)

这里用Python写一个简单的函数,完全匹配你的需求:

def filter_websocket_urls(url_list):
    # 定义允许的后缀集合,方便快速匹配
    allowed_suffixes = {'/', '/ws', '/wss'}
    # 用字典记录已经处理过的前缀,确保每个前缀只保留第一个出现的URL
    seen_prefixes = {}
    result = []
    
    for url in url_list:
        current_prefix = None
        # 遍历后缀,找到当前URL匹配的后缀并提取前缀
        for suffix in allowed_suffixes:
            if url.endswith(suffix):
                # 截取去掉后缀后的部分作为前缀
                current_prefix = url[:-len(suffix)]
                break
        # 如果URL没有匹配任何合法后缀,默认把整个URL当作前缀(可根据需求调整)
        if current_prefix is None:
            current_prefix = url
        
        # 前缀未出现过,就保留当前URL
        if current_prefix not in seen_prefixes:
            seen_prefixes[current_prefix] = url
            result.append(url)
    
    return result

# 测试你的示例输入
input_urls = ['asdf/ws', 'abc/abc/', 'asdf/wss', 'asdf/', 'ab/wss', 'ab/ws', 'abc/abc/ws', 'xyz/wss']
filtered_urls = filter_websocket_urls(input_urls)
print(filtered_urls)
# 输出正好是你要的结果: ['asdf/ws', 'abc/abc/', 'ab/wss', 'xyz/wss']

代码说明

  1. 后缀匹配:通过endswith()检查每个URL是否属于合法后缀,快速提取前缀
  2. 去重逻辑:用seen_prefixes字典记录已经处理过的前缀,确保每个前缀只保留第一次遇到的URL
  3. 顺序保留:因为是按原列表顺序遍历,所以结果列表的顺序和原列表中首次出现的顺序一致,完全符合你"保留左侧首个出现项"的要求

这个逻辑可以直接用到你的WebSocket ping场景中,拿到过滤后的列表后,就可以逐个测试延迟,选择最优连接了。

内容的提问来源于stack exchange,提问作者litepresence

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:09:56