Python中的字符计数

2024-09-29 01:19:55 发布

您现在位置:Python中文网/ 问答频道 /正文

任务是:需要从用户那里得到一个单词,然后必须对单词中的字符总数进行计数并按排序顺序显示(计数必须是降序,字符必须是升序)- 即。, 如果用户以“管理”的形式给出 那么输出应该是

**a 2
e 2
m 2
n 2
g 1
t 1**

这是我为任务编写的代码:

string=input().strip()
set1=set(string)
lis=[]
for i in set1:
 lis.append(i)
lis.sort()
while len(lis)>0:
 maxi=0
 for i in lis:
  if string.count(i)>maxi:
   maxi=string.count(i)
 for j in lis:
  if string.count(j)==maxi:
   print(j,maxi)
   lis.remove(j)

此代码为字符串“management”提供以下输出

a 2
m 2
e 2
n 2
g 1
t 1

m&e未排序。 我的代码怎么了?你知道吗


Tags: 代码用户inforstringif排序count
3条回答

代码的问题在于,您试图从列表中删除一个元素,而您仍在对它进行迭代。This can cause problems.现在,删除“a”,然后“e”占据其位置,列表前进到下一个字母“m”。因此,“e”被跳过,直到下一次迭代。你知道吗

尝试将打印和删除分开,不要从当前正在迭代的列表中删除元素,而是尝试将所有其他元素添加到新列表中。你知道吗

string=input().strip()
set1=set(string)
lis=[]
for i in set1:
 lis.append(i)
lis.sort()
while len(lis)>0:
 maxi=0
 for i in lis:
  if string.count(i)>maxi:
   maxi=string.count(i)

 for j in lis:
  if string.count(j)==maxi:
   print(j,maxi)


 dupelis = lis
 lis = [] 

 for k in dupelis:
   if string.count(k)!=maxi:
    lis.append(k)

management
a 2
e 2
m 2
n 2
g 1
t 1

Demo

你可以用一个简单的Counter来实现

from collections import Counter

Counter("management")
Counter({'a': 2, 'e': 2, 'm': 2, 'n': 2, 'g': 1, 't': 1})

代码的问题是变量maxi和两个for循环的赋值。”“e”不会排在第二位,因为您将maxi指定为“2”,并且字符串.计数(i) 将小于maxi。你知道吗

 for i in lis:
  if string.count(i)>maxi:
   maxi=string.count(i)

 for j in lis:
  if string.count(j)==maxi:
   print(j,maxi)

有几种方法可以实现你想要的目标。你可以尝试其他人解释过的解决方法。你知道吗

相关问题 更多 >