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

使用列表推导式筛选非1元素并存1到单独列表时出现None值问题

问题原因

list.append() 方法没有返回值,执行后默认返回None,这是你得到多余None的核心原因。
你写的三元表达式a if a != 1 else one_list.append(a),当元素等于1时,会执行one_list.append(a),同时将该方法的返回值None作为结果写入新列表。而[表达式 for 元素 in 迭代器]结构的列表推导式,会为每个迭代元素生成一个对应的结果值,不会自动跳过不符合条件的元素,因此最终a_list里才会出现多个None值。

解决方法

方法1:普通for循环处理(最推荐,可读性最高)

直接遍历原列表,分别分发元素到两个目标列表,逻辑清晰无歧义:

a_list = [1,1,1,1,3,4,5]
one_list = []
new_a_list = []

for num in a_list:
    if num != 1:
        new_a_list.append(num)
    else:
        one_list.append(num)

# 替换原列表内容
a_list[:] = new_a_list

print(a_list)  # 输出: [3, 4, 5]
print(one_list) # 输出: [1, 1, 1, 1]

方法2:带条件过滤的列表推导式(可选,适合偏好简写的场景)

如果要在列表推导式里完成逻辑,可以利用逻辑判断的短路特性跳过1的写入,同时收集1到另一个列表:

a_list = [1,1,1,1,3,4,5]
one_list = []

a_list[:] = [num for num in a_list if num != 1 or (one_list.append(num), False)[1]]

print(a_list)  # 输出: [3, 4, 5]
print(one_list) # 输出: [1, 1, 1, 1]

注意:该写法利用了or的短路执行逻辑,以及元组取索引1的值False让num==1的条件判定为不成立,不会把元素写入新列表,同时会执行append操作收集1,该写法可读性较低,不建议在生产环境使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:24:08