如何遍历序列找出重复字符串?Python代码输出异常求助
解决列表重复元素提取与字符串重复值查找问题
我来帮你梳理下当前代码的问题,再给出对应的修复方案,同时也会讲解如何遍历字符串找出重复值。
一、修复列表重复字符串提取的问题
你当前的代码有两个核心问题:
- 使用
extend(i)会把字符串拆成单个字符添加到列表中,比如extend("hi")会把'h'和'i'分别加入列表,而不是添加完整的"hi",应该用append(i)来添加整个字符串。 - 每次遍历元素时都调用
subjects2.count(i)判断出现次数,会导致同一个重复元素被多次添加(比如遍历到第一个"hi"时添加一次,遍历到第二个"hi"时又添加一次),如果不需要重复实例,还会造成冗余。
方案1:保留所有重复元素的实例
如果你想保留列表中所有出现过两次的元素(比如两个"hi"、两个"bi"都保留),可以先统计每个元素的出现次数,再遍历原列表收集符合条件的元素:
nosubjects = [] subjects2 = ["hi","hi","bi","ki","si","bi","li"] # 先统计每个元素的出现次数,避免重复调用count()影响效率 count_map = {} for item in subjects2: count_map[item] = count_map.get(item, 0) + 1 # 遍历原列表,收集出现次数为2的元素 for item in subjects2: if count_map[item] == 2: nosubjects.append(item) print(nosubjects) # 输出: ['hi', 'hi', 'bi', 'bi']
方案2:只保留每个重复元素一次
如果你只需要每个重复元素出现一次(比如只保留"hi"和"bi"各一次),可以直接从统计结果中提取:
subjects2 = ["hi","hi","bi","ki","si","bi","li"] count_map = {} for item in subjects2: count_map[item] = count_map.get(item, 0) + 1 unique_duplicates = [item for item, count in count_map.items() if count == 2] print(unique_duplicates) # 输出: ['hi', 'bi']
二、遍历字符串找出重复值
要找出字符串中的重复字符,思路和列表类似:先统计每个字符的出现次数,再根据需求提取重复字符。
方案1:找出所有重复的字符(去重)
如果你想得到出现次数超过1的字符,且每个字符只显示一次:
target_str = "hello world" char_count = {} # 统计每个字符的出现次数 for char in target_str: char_count[char] = char_count.get(char, 0) + 1 # 筛选出现次数>1的字符 duplicate_chars = [char for char, count in char_count.items() if count > 1] print(duplicate_chars) # 输出: ['l', 'o']
方案2:列出所有重复出现的字符实例
如果你想保留字符串中所有重复出现的字符(包括重复的实例):
target_str = "hello world" char_count = {} for char in target_str: char_count[char] = char_count.get(char, 0) + 1 all_duplicate_instances = [char for char in target_str if char_count[char] > 1] print(all_duplicate_instances) # 输出: ['l', 'l', 'o', 'l']
内容的提问来源于stack exchange,提问作者Hizumaru
相关产品推荐
相关产品推荐

