python - 第二个清单被一遍又一遍地填写。这个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]?
解决方案
在第一个循环的 if 语句中if ch not in list2:
,您正在检查当前字符是否在 list2 中。但是您将计数附加到该列表中。所以它永远不会通过检查并为字符串/数组中的每个字符添加计数。我建议使用字典将字符及其计数一起存储,因此 if 语句可以检查键(字符)是否存在,如果不存在则可以添加键及其计数。然后你应该能够找到第一个非重复字符(dic 中的第一个条目,计数为 1)。从 Python 3.6 开始,字典会记住插入的顺序,否则使用 OrderedDict。
推荐阅读
- flutter - Flutter,当父级滚动高度较长时如何处理PDF Viewer的滚动?
- lightweight-charts - 将部分数据设置为时间范围的系列
- java - 如何将输入设置为公共常量
- c++ - FFT 的真实输入,然后 iFFT 回到一维数组中的真实数据
- foreach - 使用 Mule4 将 CSV 文件写入(附加)到变量中
- excel - 如何在 Excel VBA 中打开“带有新的 PPT 文件”选项
- python - 根据列表中的列名选择列
- python - 如何使用用户输入修改列表(二维数组)?(Python)
- java - 如何使用vscode将一个文件的类导入Java子文件夹中的另一个文件
- python - CPython 3.9 python.gram 文件 - 尝试使用 utf-8 文本运行 make regen-pegen 时出错