python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python列表和字符串数据去重

Python中列表和字符串常用的数据去重方法总结

作者:虫无涯

关于数据去重,咱们这里简单理解下,就是删除掉重复的数据,应用的场景比如某些产品产生的大数据,有很多重复的数据,为了不影响分析结果,我们可能需要对这些数据进行去重,所以本文给大家总结了Python中列表和字符串常用的数据去重方法,需要的朋友可以参考下

1 关于数据去重

2 字符串去重

2.1 for方法

import unittest

class TestDeduplication(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.char_date = "12344312abcdcbdaABCDDCBA张王李张"
        print(f"原始字符串为:{cls.char_date}")

    @classmethod
    def tearDownClass(cls) -> None:
        pass

    def test_char_for(self):
        char_date01 = ""
        for data in self.char_date:
            if data not in char_date01:
                char_date01 += data
        print(f"for方法去重后数据:{char_date01}")
        
if __name__ == "__main__":
    unittest.main()

原始字符串为:12344312abcdcbdaABCDDCBA张王李张
for方法去重后数据:1234abcdABCD张王李

2.2 while方法

import unittest

class TestDeduplication(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.char_date = "12344312abcdcbdaABCDDCBA张王李张"
        print(f"原始字符串为:{cls.char_date}")

    @classmethod
    def tearDownClass(cls) -> None:
        pass

    def test_char_while(self):
        char_date02 = ""
        flag = len(self.char_date) - 1
        while True:
            if flag >= 0:
                if self.char_date[flag] not in char_date02:
                    char_date02 += self.char_date[flag]
                flag -= 1
            else:
                break
        print(f"while方法去重后数据:{char_date02}")

if __name__ == "__main__":
    unittest.main()

原始字符串为:12344312abcdcbdaABCDDCBA张王李张
while方法去重后数据:张李王ABCDadbc2134

2.3 列表方法

    def test_char_list(self):
        char_date03 = set(self.char_date)
        char_date04 = list(char_date03)
        char_date04.sort(key=self.char_date.index)
        print(f"列表方法去重后数据:{''.join(char_date04)}")

原始字符串为:12344312abcdcbdaABCDDCBA张王李张
列表方法去重后数据:1234abcdABCD张王李

2.4 直接删除法

    def test_char_delete(self):
        for data in self.char_date:
            if self.char_date[0] in self.char_date[1:len(self.char_date)]:
                self.char_date = self.char_date[1:len(self.char_date)]
            else:
                self.char_date = self.char_date[1:len(self.char_date)] + self.char_date[0]
        print(f"直接删除方法去重后数据:{''.join(self.char_date)}")

原始字符串为:12344312abcdcbdaABCDDCBA张王李张
直接删除方法去重后数据:4312cbdaDCBA王李张

2.5 fromkeys方法

    def test_char_fromkeys(self):
        char_date05 = {}
        char_date06 = char_date05.fromkeys(self.char_date)
        list_char = list(char_date06.keys())
        print(f"fromkeys方法去重后数据:{''.join(list_char)}")

原始字符串为:12344312abcdcbdaABCDDCBA张王李张
fromkeys方法去重后数据:1234abcdABCD张王李

3 列表去重

3.1 for方法

class TestDeduplication(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.list_data = ["A", "B", "C", "D", "E", "C", "A", "B"]
        print(f"原始列表为:{cls.list_data}")

    @classmethod
    def tearDownClass(cls) -> None:
        pass
        
    def test_list_for(self):
        list_data01 = []
        for data in self.list_data:
            if data not in list_data01:
                list_data01.append(data)
        print(f"for方法:{list_data01} ")

if __name__ == "__main__":
    unittest.main()

原始列表为:['A', 'B', 'C', 'D', 'E', 'C', 'A', 'B']
for方法:['A', 'B', 'C', 'D', 'E'] 

3.2 set方法1

 def test_list_set(self):
        list_data02 = list(set(self.list_data))
        print(f"set方法1:{list_data02}")

原始列表为:['A', 'B', 'C', 'D', 'E', 'C', 'A', 'B']
set方法1:['D', 'C', 'B', 'E', 'A']

3.3 set方法2

 def test_list_set01(self):
        list_data03 = list(set(self.list_data))
        list_data03.sort(key=self.list_data.index)
        print(f"set方法2:{list_data03}")

原始列表为:['A', 'B', 'C', 'D', 'E', 'C', 'A', 'B']
set方法2:['A', 'B', 'C', 'D', 'E']

3.4 count方法

    def test_list_count(self):
        self.list_data.sort()
        for data in self.list_data:
            while self.list_data.count(data) > 1:
                del self.list_data[self.list_data.index(data)]
        print(f"count方法:{self.list_data}")

原始列表为:['A', 'B', 'C', 'D', 'E', 'C', 'A', 'B']
count方法:['A', 'B', 'C', 'D', 'E']

3.5 转字典法

 def test_list_dict(self):
        list_data04 = {}
        list_data05 = list_data04.fromkeys(self.list_data).keys()
        list_data06 = list(list_data05)
        print(f"字典法:{list_data06}")

原始列表为:['A', 'B', 'C', 'D', 'E', 'C', 'A', 'B']
字典法:['A', 'B', 'C', 'D', 'E']

4 完整代码

# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/22 
# 文件名称:test_deduplication.py
# 作用:字符串和列表去重
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson


import unittest


class TestDeduplication(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.char_date = "12344312abcdcbdaABCDDCBA张王李张"
        cls.list_data = ["A", "B", "C", "D", "E", "C", "A", "B"]
        print(f"原始字符串为:{cls.char_date}")
        print(f"原始列表为:{cls.list_data}")

    @classmethod
    def tearDownClass(cls) -> None:
        pass

    def test_char_for(self):
        char_date01 = ""
        for data in self.char_date:
            if data not in char_date01:
                char_date01 += data
        print(f"for方法去重后数据:{char_date01}")

    def test_char_while(self):
        char_date02 = ""
        flag = len(self.char_date) - 1
        while True:
            if flag >= 0:
                if self.char_date[flag] not in char_date02:
                    char_date02 += self.char_date[flag]
                flag -= 1
            else:
                break
        print(f"while方法去重后数据:{char_date02}")

    def test_char_list(self):
        char_date03 = set(self.char_date)
        char_date04 = list(char_date03)
        char_date04.sort(key=self.char_date.index)
        print(f"列表方法去重后数据:{''.join(char_date04)}")

    def test_char_delete(self):
        for data in self.char_date:
            if self.char_date[0] in self.char_date[1:len(self.char_date)]:
                self.char_date = self.char_date[1:len(self.char_date)]
            else:
                self.char_date = self.char_date[1:len(self.char_date)] + self.char_date[0]
        print(f"直接删除方法去重后数据:{''.join(self.char_date)}")

    def test_char_fromkeys(self):
        char_date05 = {}
        char_date06 = char_date05.fromkeys(self.char_date)
        list_char = list(char_date06.keys())
        print(f"fromkeys方法去重后数据:{''.join(list_char)}")

    print("===============================================")

    def test_list_for(self):
        list_data01 = []
        for data in self.list_data:
            if data not in list_data01:
                list_data01.append(data)
        print(f"for方法:{list_data01} ")

    def test_list_set(self):
        list_data02 = list(set(self.list_data))
        print(f"set方法1:{list_data02}")

    def test_list_set01(self):
        list_data03 = list(set(self.list_data))
        list_data03.sort(key=self.list_data.index)
        print(f"set方法2:{list_data03}")

    def test_list_count(self):
        self.list_data.sort()
        for data in self.list_data:
            while self.list_data.count(data) > 1:
                del self.list_data[self.list_data.index(data)]
        print(f"count方法:{self.list_data}")

    def test_list_dict(self):
        list_data04 = {}
        list_data05 = list_data04.fromkeys(self.list_data).keys()
        list_data06 = list(list_data05)
        print(f"字典法:{list_data06}")
        
        
if __name__ == "__main__":
    unittest.main()

===============================================
原始字符串为:12344312abcdcbdaABCDDCBA张王李张
原始列表为:['A', 'B', 'C', 'D', 'E', 'C', 'A', 'B']

直接删除方法去重后数据:4312cbdaDCBA王李张
for方法去重后数据:1234abcdABCD张王李
fromkeys方法去重后数据:1234abcdABCD张王李
列表方法去重后数据:1234abcdABCD张王李
while方法去重后数据:张李王ABCDadbc2134
count方法:['A', 'B', 'C', 'D', 'E']
字典法:['A', 'B', 'C', 'D', 'E']
for方法:['A', 'B', 'C', 'D', 'E'] 
set方法1:['B', 'A', 'D', 'C', 'E']
set方法2:['A', 'B', 'C', 'D', 'E']

放一张图吧(虽然用处不大,哈哈):

以上就是Python中列表和字符串常用的数据去重方法总结的详细内容,更多关于Python列表和字符串数据去重的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文