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

如何从嵌套列表中移除长度≤2的字符串?

解决嵌套列表中过滤短字符串的问题

我来帮你搞定这个问题!你现在的核心问题是没有把过滤后的新列表赋值回原变量corpus,所以不管怎么写推导式,原列表都不会被修改。

最快的实现方法

直接用列表推导式并赋值回corpus,这是Python里处理这类问题最简洁高效的方式:

corpus = list(r_corpus('teeny.txt'))
print('initial corpus here ', corpus)

# 关键:将推导式生成的新列表赋值给corpus,覆盖原变量
corpus = [[subelt for subelt in elt if len(subelt) > 2] for elt in corpus]

print('\n\n corpus here without any string of length 2 or smaller', corpus)

为什么之前的尝试无效?

咱们来拆解下你之前的问题:

  • 当前尝试:你写了嵌套列表推导式,但只是计算了结果却没有保存到corpus里,相当于做了无用功,原列表自然纹丝不动。
  • 之前尝试1:[y for y in thing if len(y)>2]生成了过滤后的新列表,但没有赋值给任何变量,原thing(也就是corpus里的子列表)不会被改变。
  • 之前尝试2:循环里的sentence = [x...]只是创建了一个局部变量,它指向新的过滤列表,但原corpus里的子列表还是原来的引用,根本没被更新。

备选:原地修改的方式

如果你不想生成新列表,而是直接修改原列表,可以用索引循环的方式:

for idx, sentence in enumerate(corpus):
    corpus[idx] = [x for x in sentence if len(x) > 2]

不过这种方式的效率略低于直接的列表推导式,因为列表推导式是Python底层优化过的操作,速度更快。

预期输出

运行正确代码后,你会得到想要的结果:

[['extracting', 'opinions'], ['soo', 'min', 'kim', 'and'], ['abstract'], ['this', 'paper', 'presents', 'method', 'for', 'identifying'], ['this', 'section', 'reviews', 'previous', 'works'], ['subjectivity', 'detection'], ['work','similar','ours', 'but', 'different']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:02:18