Python 最常用字符-用户提交的字符串,不带字典或计数器

Python 最常用字符-用户提交的字符串,不带字典或计数器,python,string,python-3.x,Python,String,Python 3.x,目前,我正在编写一个程序,计算用户提交的字符串中的所有非空白字符,然后返回最常用的字符。我不能使用集合、计数器或字典。以下是我想做的: 拆分字符串,以便删除空白。然后对每个字符进行计数并返回一个值。我想在这里发布一些东西,但迄今为止我所尝试的一切都遭到了严重的失败。最接近我的是这个节目: strin=input('Enter a string: ') fc=[] nfc=0 for ch in strin: i=0 j=0 while i<len(strin): i

目前,我正在编写一个程序,计算用户提交的字符串中的所有非空白字符,然后返回最常用的字符。我不能使用集合、计数器或字典。以下是我想做的:

拆分字符串,以便删除空白。然后对每个字符进行计数并返回一个值。我想在这里发布一些东西,但迄今为止我所尝试的一切都遭到了严重的失败。最接近我的是这个节目:

strin=input('Enter a string: ')
fc=[]
nfc=0
for ch in strin:
    i=0
    j=0
while i<len(strin):
    if ch.lower()==strin[i].lower():
        j+=1
        i+=1
    if j>nfc and ch!=' ':
        nfc=j
        fc=ch
    print('The most frequent character in string is: ', fc )
strin=input('输入字符串:')
fc=[]
nfc=0
对于CHIN strin:
i=0
j=0
而infc和ch!='':
nfc=j
fc=ch
print('字符串中最常见的字符是:',fc)
如果您可以修复此代码,或者告诉我一种更好的方法来满足所需的标准,这将非常有用。而且,在你说这已经在这个论坛上做了一百次之前,请注意,我创建了一个帐户专门问这个问题。是的,有很多这样的问题,但有些问题是从文本文件或程序中的现有字符串读取的。其中绝大多数包含了我目前无法在本章中使用的词典、计数器或集合

用“老办法”就行了。创建一个26个零的列表(好吧,这是一个集合,但这是一个非常基本的集合,所以不应该是问题),并根据位置增加。同时计算最大索引

strin="lazy cat dog whatever"
l=[0]*26

maxindex=-1
maxvalue=0
for c in strin.lower():
    pos = ord(c)-ord('a')
    if 0<=pos<=25:
        l[pos]+=1
        if l[pos]>maxvalue:
            maxindex=pos
            maxvalue = l[pos]

print("max count {} for letter {}".format(maxvalue,chr(maxindex+ord('a'))))

作为Jean解决方案的替代方案(不使用允许对字符串进行一次传递的列表),您可以在此处使用
str.count
,它几乎完成了您想要做的事情:

strin = input("Enter a string: ").strip()
maxcount = float('-inf')
maxchar = ''
for char in strin:
    c = strin.count(char) if not char.isspace() else 0
    if c > maxcount:
        maxcount = c
        maxchar = char
print("Char {}, Count {}".format(maxchar, maxcount))
如果列表可用,我会使用Jean的解决方案。他不使用
O(N)
函数
N
次:-)

附言:如果您使用
max
,您可以用一行压缩此文件:

max(((strin.count(i), i) for i in strin if not i.isspace()))

要跟踪不同字符的几个计数,必须使用集合(即使它是Python中作为字典实现的全局命名空间)

要在支持任意Unicode字符串的情况下打印最常见的非空格字符,请执行以下操作:

import sys

text = input("Enter a string (case is ignored)").casefold() # default caseless matching

# count non-space character frequencies
counter = [0] * (sys.maxunicode + 1)
for nonspace in map(ord, ''.join(text.split())):
    counter[nonspace] += 1

# find the most common character
print(chr(max(range(len(counter)), key=counter.__getitem__)))

Cython中的一个类似列表是。

我也测试了这个列表,虽然它比我最近能做的任何事情都好。它产生了这个句子中第二个最常用的字母。“有一个字符串可以搜索其中最常用的字符。”即e。不知道为什么它没有返回t为8。这是
import sys

text = input("Enter a string (case is ignored)").casefold() # default caseless matching

# count non-space character frequencies
counter = [0] * (sys.maxunicode + 1)
for nonspace in map(ord, ''.join(text.split())):
    counter[nonspace] += 1

# find the most common character
print(chr(max(range(len(counter)), key=counter.__getitem__)))