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

Python新手求助:如何检查列表重复项并移至无重复的另一列表?

问题描述

我是Python编程新手,想要实现以下需求:从列表中筛选无重复项存入fileExtList,同时将原列表中重复出现的元素(仅保留唯一值)存入duplicatesList。

现有代码如下:

fileExt = ['json','csv','excel','parquet','csv','xml','pkl','json','json','csv','docx']

fileExtList = []

duplicatesList = []

for ext in fileExt:
    if ext not in fileExtList:
        fileExtList.append(ext)
    if ext in fileExtList and ext not in duplicatesList:
        duplicatesList.append(ext)

期望输出:

print(fileExtList) #Output: ['json','csv','excel','parquet','xml','pkl','docx']

print(duplicatesList) #Output: ['json','csv']

其中duplicatesList需无重复元素,仅包含原列表中出现过多次的元素。

问题分析与解决

你的代码问题在于:当元素第一次出现时,第一个if会把它加入fileExtList,紧接着的第二个if会因为ext刚被加入fileExtList,满足ext in fileExtList的条件,导致第一次出现的元素也被误加入duplicatesList。

这里提供两种简洁的解决思路:

方法一:计数统计(直观易理解)

先统计每个元素的出现次数,再分别生成目标列表:

fileExt = ['json','csv','excel','parquet','csv','xml','pkl','json','json','csv','docx']

# 统计每个元素的出现次数
count_dict = {}
for ext in fileExt:
    count_dict[ext] = count_dict.get(ext, 0) + 1

# 生成无重复列表(保持原顺序)
fileExtList = []
seen = set()
for ext in fileExt:
    if ext not in seen:
        fileExtList.append(ext)
        seen.add(ext)

# 生成重复元素列表(仅保留出现多次的元素)
duplicatesList = [ext for ext, count in count_dict.items() if count > 1]

print(fileExtList)  # ['json','csv','excel','parquet','xml','pkl','docx']
print(duplicatesList)  # ['json','csv']

方法二:遍历过程中记录状态(高效单遍历)

fileExt = ['json','csv','excel','parquet','csv','xml','pkl','json','json','csv','docx']

fileExtList = []
duplicatesList = []
seen = set()
added_to_duplicates = set()

for ext in fileExt:
    if ext not in seen:
        fileExtList.append(ext)
        seen.add(ext)
    else:
        if ext not in added_to_duplicates:
            duplicatesList.append(ext)
            added_to_duplicates.add(ext)

print(fileExtList)  # ['json','csv','excel','parquet','xml','pkl','docx']
print(duplicatesList)  # ['json','csv']

内容的提问来源于stack exchange,提问作者Alejandro López Domínguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:22:41