如何去除列中逗号分隔值的重复项并保持原有顺序?
去除逗号分隔值的重复项并保留原有顺序
问题示例
输入数据
列 ------------------ e,f,g,a,b,b,c,c,d x,x,y,y,z,z r,s,t,r,s,t,z
期望输出
e,f,g,a,b,c,d x,y,z r,s,t,z
解决方案
1. Python 实现
通过遍历拆分后的元素,用列表记录已出现项,仅保留首次出现的值,最后重新拼接为字符串:
# 示例数据 data = [ "e,f,g,a,b,b,c,c,d", "x,x,y,y,z,z", "r,s,t,r,s,t,z" ] def remove_duplicates_keep_order(s): seen = [] for item in s.split(','): if item not in seen: seen.append(item) return ','.join(seen) # 处理每一行并输出 for line in data: print(remove_duplicates_keep_order(line))
2. Excel VBA 自定义函数
如果需要在Excel中处理,可以创建自定义函数:
- 按
Alt + F11打开VBA编辑器,插入新模块 - 粘贴以下代码:
Function RemoveDupesKeepOrder(inputStr As String, delimiter As String) As String Dim arr() As String Dim seen As Object Dim i As Integer Dim result As String Set seen = CreateObject("Scripting.Dictionary") arr = Split(inputStr, delimiter) For i = LBound(arr) To UBound(arr) If Not seen.Exists(arr(i)) Then seen.Add arr(i), arr(i) result = result & arr(i) & delimiter End If Next i ' 移除末尾多余的分隔符 If Len(result) > 0 Then result = Left(result, Len(result) - Len(delimiter)) End If RemoveDupesKeepOrder = result End Function
- 在目标单元格中调用函数,例如数据在A2单元格时,输入
=RemoveDupesKeepOrder(A2, ",")
3. PowerShell 实现
利用哈希表跟踪已出现元素,筛选出首次出现的值:
# 示例数据 $data = @( "e,f,g,a,b,b,c,c,d", "x,x,y,y,z,z", "r,s,t,r,s,t,z" ) foreach ($line in $data) { $seen = @{} $result = @() foreach ($item in $line -split ',') { if (-not $seen.ContainsKey($item)) { $seen[$item] = $true $result += $item } } $result -join ',' }
内容的提问来源于stack exchange,提问作者StackFeel
相关产品推荐
相关产品推荐

