首页 > 解决方案 > 第二个清单被一遍又一遍地填写。这个python代码有什么问题?

问题描述

def firstnonrepeatingchar(str1):
    list1=list(str1)
    list2=[]
    print(list1)
    for ch in list1:
        if ch not in list2:
            a=list1.count(ch)
            list2.append(a)
    print(list2)
    for x in list2:
        if(x==1):
            print(list1[x+2])



string1="aaabccc"
firstnonrepeatingchar(string1)

输出将 list2 作为 [3,3,3,1,3,3,3] 如何使其仅作为 [3,1,3]?

标签: pythonlistappend

解决方案


在第一个循环的 if 语句中if ch not in list2:,您正在检查当前字符是否在 list2 中。但是您将计数附加到该列表中。所以它永远不会通过检查并为字符串/数组中的每个字符添加计数。我建议使用字典将字符及其计数一起存储,因此 if 语句可以检查键(字符)是否存在,如果不存在则可以添加键及其计数。然后你应该能够找到第一个非重复字符(dic 中的第一个条目,计数为 1)。从 Python 3.6 开始,字典会记住插入的顺序,否则使用 OrderedDict。


推荐阅读