如何从列表中移除包含超过指定数量唯一字符的字符串?代码调试求助
解决列表中移除含指定数量以上唯一字符的字符串问题
首先,你的代码里的条件判断逻辑有明显错误,这也是为什么返回空列表的原因:
set(alphabet) in set(word)完全不符合逻辑:set(alphabet)是全部26个小写字母的集合,单个单词的字符集合不可能包含它,这个判断永远是False;< 8的写法也不对,Python无法正确解析你想表达的“唯一字符数量小于8”的逻辑。
其实解决这个问题很简单,不需要复杂的集合比较,我们只需要计算每个单词的唯一字符数量,再根据需求筛选即可。
需求1:移除包含超过7个唯一字符的字符串(保留≤7个的)
直接用len(set(word))就能得到单词的唯一字符数,然后判断是否符合条件:
file1 = ['jazz', 'messu', 'jazzmessu', 'jazzmessut'] file2 = [] for word in file1: unique_chars = len(set(word)) if unique_chars <= 7: file2.append(word) print(file2) # 输出结果: ['jazz', 'messu', 'jazzmessu']
解释:
jazz的唯一字符是j、a、z(共3个),符合条件;messu的唯一字符是m、e、s、u(共4个),符合条件;jazzmessu的唯一字符是j、a、z、m、e、s、u(共7个),符合条件;jazzmessut多了一个t(共8个),被移除。
需求2:移除包含超过8个唯一字符的字符串(保留≤8个的)
只需要把判断条件改成unique_chars <= 8即可:
file1 = ['jazz', 'messu', 'jazzmessu', 'jazzmessut'] file2 = [] for word in file1: unique_chars = len(set(word)) if unique_chars <= 8: file2.append(word) print(file2) # 输出结果: ['jazz', 'messu', 'jazzmessu', 'jazzmessut']
此时jazzmessut的8个唯一字符符合≤8的要求,会被保留下来。
更简洁的列表推导式版本
如果你喜欢更简洁的写法,可以用Python的列表推导式一行搞定:
对应需求1
file1 = ['jazz', 'messu', 'jazzmessu', 'jazzmessut'] file2 = [word for word in file1 if len(set(word)) <= 7] print(file2)
对应需求2
file1 = ['jazz', 'messu', 'jazzmessu', 'jazzmessut'] file2 = [word for word in file1 if len(set(word)) <= 8] print(file2)
总结一下:完全不需要拆分单词再逐个比较集合,len(set(word))是Python中快速获取字符串唯一字符数量的最优方法,用它来做条件判断就可以轻松完成你的需求。
内容的提问来源于stack exchange,提问作者Mugrdggr
相关产品推荐
相关产品推荐

