20
str1 = '''拷贝过来的字符串'''list1 = []
for each in str1:
if each not in list1:
if each == '\n':
print('\\n', str1.count(each))
else:
print(each, str1.count(each))
list1.append(each)
这里为什么要有一个list1?
如果
str1 = '''拷贝过来的字符串'''
for each in str1:
if each == '\n':
print('\\n', str1.count(each))
else:
print(each, str1.count(each))
如果没有list,run这个代码好像停不下来。。。。 list1的作用就是同一个字符统计一次,不会多次重复统计同一个字符的个数。
去掉之后也不会停不下来,只是拷贝过来的字符串比较长,程序会不停的输出,直到把str1遍历完毕
例如:
str1="abcabcdeabc"
这样的话,第一种写法,只会print五次,因为str1中有五种字符:'a' 'b' 'c' 'd' 'e'
第二种写法则会重复print输出11次,因为str1长度为11 怎么会停不下来???我看着能停啊! 楼主的标题能再简单一些吗 sunrise085 发表于 2020-8-13 08:58
list1的作用就是同一个字符统计一次,不会多次重复统计同一个字符的个数。
去掉之后也不会停不下来,只是 ...
谢谢,能否再解释的详细一些?就是为啥list1的作用就是同一个字符统计一次?这个是怎么实现的? 本帖最后由 sunrise085 于 2020-8-13 10:30 编辑
zmq 发表于 2020-8-13 09:47
谢谢,能否再解释的详细一些?就是为啥list1的作用就是同一个字符统计一次?这个是怎么实现的?
举个例子:假设:str1 = '''abc\nabcde\nabc'''
str1 = '''abc\nabcde\nabc'''
list1 = []
for each in str1:
if each not in list1:
if each == '\n':
print('\\n', str1.count(each))
else:
print(each, str1.count(each))
list1.append(each)
运行结果:
a 3
b 3
c 3
\n 2
d 1
e 1
遍历整个字符串的时候,不会重复输出。虽然,很多字符都出现了不止一次,但是统计输出的时候,只输出了一次,因为有list1,统计过的字符,会被放入list1中,之后在遇到该字符就不再重复统计了,第一个字符是'a',进行统计并输出了a3,并将字符'a' 添加到list1中,第五个字符还是'a' ,但是'a' 已经在list1中,说明已经统计过了,不会进入if语句了就不再输出了。其他字符也是如此
第二种写法
str1 = '''abc\nabcde\nabc'''
for each in str1:
if each == '\n':
print('\\n', str1.count(each))
else:
print(each, str1.count(each))
运行结果
a 3
b 3
c 3
\n 2
a 3
b 3
c 3
d 1
e 1
\n 2
a 3
b 3
c 3
这种写法,遍历字符串的每一个字符的时候,都会有输出。第一个字符是'a',进行统计并输出了a3,第五个字符还是'a' ,再次输出 a 3 ,第11个字符还是'a' ,再次输出a 3
若字符串有成百上千个字符实际上只有几十种不同的字符,那第二种写法就会不停的输出,感觉好像程序停不下来了。而第一种写法,只会输出这几十次,程序运行也会快很多,因为print非常耗费时间。
wp231957 发表于 2020-8-13 09:00
楼主的标题能再简单一些吗
建议改为 NULL {:10_256:}
页:
[1]