Python 对数组中的特定字母进行计数

Python 对数组中的特定字母进行计数,python,arrays,string,Python,Arrays,String,我被要求创建一个函数,在该函数中,它统计一个字符串中来自b-s的所有删除者。以下是我到目前为止的情况: def strange_count(s): count = 0 s = s.lower() s_count = [b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s] while count <= len(s): for i in range(len(s_count)): if s_count[i

我被要求创建一个函数,在该函数中,它统计一个字符串中来自b-s的所有删除者。以下是我到目前为止的情况:

def strange_count(s):
    count = 0
    s = s.lower()
    s_count = [b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s]
    while count <= len(s):
        for i in range(len(s_count)):
            if s_count[i] == s[count]:
                count += 1
    return      

您可以使用字母按字典顺序排序的事实,而不是制作列表,这样您就可以将它们与
='b'和i这一行进行比较:

s_count = [b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s]
应该是这样的:

s_count = ["b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s"]
def strange_count(s):
  count   = 0
  s       = s.lower()
  s_count = ["b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s"]
  for letter in s:
    if letter in s_count:
      count += 1
  return count

print(strange_count("asfdsjfdlkwjrwoiureaoifhwabrejwer"))
input = "Hello world"
input = input.lower()
list_chars = ['b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s']
counts = {}
for c in list_chars:
    counts[c] = input.count(c)

print counts
然后你会发现你处于一个无限循环中,所以试着像这样重写:

s_count = ["b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s"]
def strange_count(s):
  count   = 0
  s       = s.lower()
  s_count = ["b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s"]
  for letter in s:
    if letter in s_count:
      count += 1
  return count

print(strange_count("asfdsjfdlkwjrwoiureaoifhwabrejwer"))
input = "Hello world"
input = input.lower()
list_chars = ['b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s']
counts = {}
for c in list_chars:
    counts[c] = input.count(c)

print counts
问题-变量与字母 上面是而不是声明了一个列表,其中包含与您正在谈论的字母范围相对应的元素

你真正想说的是
s\u count
应该是一个列表,其中元素的值应该对应于变量
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s

您将从python解释器获得一条诊断(错误消息),因为这些变量都没有声明


解决方案 如果要创建字符列表,则需要将它们包装在
(如下所示)中

注意:鉴于上述内容的编写和维护都非常繁琐,因此初始化
s_count
的更合适方法是
s_count=list(“bcdefghijklmnopqrs”)
——这将产生所需的结果


该错误表示您正在使用未定义的变量-
b
c
,等等。您似乎打算使用这些字符,在这种情况下,应将它们括在引号中:

s_count = ['b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s']
话虽如此,值得记住的是,字符是顺序的,因此您可以只使用
=
运算符。此外,IMHO,如果您只使用
求和
和一个列表,那么为其定义一个函数似乎有点过火了:

mystring = 'some string'
strange_count = sum(1 for c in s if c >= 'b' and c <= 's')
mystring='some string'
奇怪的_count=sum(如果c>='b'和c,则s中的c为1)在您的情况下,您可以查看每个字符是否>='b”和<='s“,指定某些字符的另一种有效方法是使用一组您要检查的字符,并将s中的字符在集合中的次数相加:

def strange_count(s):
    s = s.lower()
    s_count = {"b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s"}
    return sum(ch in s_count for ch in s)
就您的错误而言,您需要实际使用双引号或单引号创建字符串:

["b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s"]
使用
b,
c
python将查找使用
a,b,c…
名称定义的变量,因此您将得到
namererror
,除非您实际上在某个地方定义了这些变量


如果您要使用如果您没有处理很长的字符串,或者您没有被要求考虑计算成本,您可以使用如下内容:

s_count = ["b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s"]
def strange_count(s):
  count   = 0
  s       = s.lower()
  s_count = ["b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s"]
  for letter in s:
    if letter in s_count:
      count += 1
  return count

print(strange_count("asfdsjfdlkwjrwoiureaoifhwabrejwer"))
input = "Hello world"
input = input.lower()
list_chars = ['b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s']
counts = {}
for c in list_chars:
    counts[c] = input.count(c)

print counts

你需要担心大写字母吗?对于像“é”这样带变音符号的外语字母呢?