[python面试题] 保持列表的原顺序并进行去重的5种方法

    L = [4, 1, 7, 4, 4, 6, 2, 1, 6, 6],想办法去掉列表的重复元素,同时保持原来的排列顺序;

# 第1种方法,利用集合去重,然后用原列表的index方法排序
L = [4, 1, 7, 4, 4, 6, 2, 1, 6, 6]
L1 = list(set(L))
L1.sort(key=L.index)
print(L1)
print('\n')

# 第2种方法,利用for和if进行有序去重
new_list = []
for i in L:
    if i not in new_list:
        new_list.append(i)
print(new_list)
print('\n')

# 第3种方法,利用索引去重
new_list = []
for index, num in enumerate(L):
    if L.index(num) == index:  # 列表的index方法只从列表找第一个匹配元素的索引,后面重复的索引不会再找
        new_list.append(num)
print(new_list)
print('\n')

# 第4种方法,利用列表的count方法删除重复元素
news_ids = L[:]
for i in L:
    while news_ids.count(i) > 1:
        del news_ids[news_ids.index(i)]

news_ids.sort(key=L.index)
print(news_ids)
print('\n')

# 第5种方法,利用字典的key值不重复的特性去重
new_dict = {}.fromkeys(L)
print(new_dict)
L1 = list(new_dict.keys())
L1.sort(key=L.index)
print(L1)
# 结果
[4, 1, 7, 6, 2]


[4, 1, 7, 6, 2]


[4, 1, 7, 6, 2]


[4, 1, 7, 6, 2]


{1: None, 2: None, 4: None, 6: None, 7: None}
[4, 1, 7, 6, 2]

总结:

    对列表去重是比较简单的,直接用集合的特性去重就行,但是要保持原列表的顺序并去重就比较麻烦,这里介绍了5种保持列表的原顺序并进行去重的方法。


在自动化测试面试中,列表是一个高频考察的编码题目,它不仅检验应聘者的编码能力,还考察对数据结构的理解和应用。为了保持列表中元素的顺序,可以使用字典来实现。具体步骤如下: 参考资源链接:[Python自动化测试面试必备:编码题解析与技巧](https://wenku.youkuaiyun.com/doc/6401ad3dcce7214c316eecf7?spm=1055.2569.3001.10343) 首先,初始化一个空字典,然后遍历列表中的每个元素,将其作为键存入字典。由于字典的键是唯一的,复的元素将不会被添加到字典中,这样就实现了的目的。同时,字典在插入键对时会保持键的顺序,因此列表顺序也得以保持。 以下是具体的Python代码示例: ```python def list_deduplicate_keep_order(lst): seen = dict() result = [] for item in lst: if item not in seen: seen[item] = True result.append(item) return result # 示例使用 original_list = [1, 2, 1, 3, 2, 4] deduplicated_list = list_deduplicate_keep_order(original_list) print(deduplicated_list) # 输出应为 [1, 2, 3, 4] ``` 在上述代码中,`seen` 字典记录了已经出现过的元素,`result` 列表用于存放保持顺序的元素。通过这种方式,我们可以高效地保持元素的顺序,这在面试中是一个很好的展示点。 掌握这种技术细节对于面试官来说是非常有价的,因为它表明你不仅有扎实的基础知识,还能够考虑到数据结构在实际问题中的应用。如果你希望在自动化测试的编码面试中更加得心应手,建议深入学习相关的编程技巧和思想。此外,为了全面提升你的编码能力,可以参考《Python自动化测试面试必备:编码题解析与技巧》这本书,它提供了更多类似的编码题目解析,帮助你系统性地准备面试中的编码题目。 参考资源链接:[Python自动化测试面试必备:编码题解析与技巧](https://wenku.youkuaiyun.com/doc/6401ad3dcce7214c316eecf7?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值