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

如何将嵌套列表以指定分隔符分隔拼接,模拟string.join()的行为?

实现嵌套列表的类似str.join()功能

我懂你想要的效果——就像字符串的join()方法那样,把分隔符插入到嵌套列表的每两个子列表之间,而不是先扁平化列表再插入元素。你之前用itertools.chain的思路依赖于子列表长度一致,显然没法处理子列表长度参差不齐的情况,下面给你几个适配性更强的解决方案:

方法一:简洁的列表推导式+itertools.chain

核心思路是给每个子列表后面都配上分隔符,最后再去掉末尾多余的那个分隔符,用chain把结构展开:

from itertools import chain

lsts = [[1, 2, 3], [4, 5], [6]]
delim = ['delim']

# 遍历子列表,每个子列表后跟分隔符,最后切掉末尾多余的分隔符
result = list(chain(*([sub, delim] for sub in lsts)))[:-1]
print(result)
# 输出: [[1, 2, 3], ['delim'], [4, 5], ['delim'], [6]]

这个写法很紧凑,完全贴合字符串join()的逻辑:每个元素后加分隔符,再移除最后一个多余的分隔符。

方法二:手动循环构建(直观易读)

如果不想依赖itertools,手动循环的方式更适合新手理解,逻辑一目了然:

lsts = [[1, 2, 3], [4, 5], [6]]
delim = ['delim']

result = []
for idx, sub_list in enumerate(lsts):
    result.append(sub_list)
    # 只有非最后一个子列表,才添加分隔符
    if idx != len(lsts) - 1:
        result.append(delim)
print(result)
# 输出同样符合预期

这种写法可以轻松应对各种边界情况,比如空列表、只有一个子列表的场景,不会出现多余的分隔符。

方法三:用zip_longest处理更复杂场景

如果需要处理空列表等极端情况,itertools.zip_longest会更健壮:

from itertools import chain, zip_longest

lsts = [[1, 2, 3], [4, 5], [6]]
delim = ['delim']

# 生成和子列表数量-1一致的分隔符列表
delim_list = [delim] * (len(lsts) - 1)
# 配对子列表和分隔符,展开后过滤掉末尾的None
result = list(chain.from_iterable(zip_longest(lsts, delim_list)))[:-1]
print(result)

要是你的分隔符是可变对象(比如需要每个分隔符都是独立的新列表),记得把delim换成生成新对象的方式,比如用lambda: ['delim']()来创建新实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:02:37