Python 对数组中的特定字母进行计数
我被要求创建一个函数,在该函数中,它统计一个字符串中来自b-s的所有删除者。以下是我到目前为止的情况: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
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
你需要担心大写字母吗?对于像“é”这样带变音符号的外语字母呢?