鱼C论坛

 找回密码
 立即注册
查看: 953|回复: 6

[已解决]20

[复制链接]
发表于 2020-8-13 08:50:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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这个代码好像停不下来。。。。
最佳答案
2020-8-13 10:19:30
本帖最后由 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',进行统计并输出了  a  3  ,并将字符'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',进行统计并输出了  a  3  ,第五个字符还是'a' ,再次输出 a 3 ,第11个字符还是'a' ,再次输出  a 3

若字符串有成百上千个字符实际上只有几十种不同的字符,那第二种写法就会不停的输出,感觉好像程序停不下来了。而第一种写法,只会输出这几十次,程序运行也会快很多,因为print非常耗费时间。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-13 08:58:13 | 显示全部楼层
list1的作用就是同一个字符统计一次,不会多次重复统计同一个字符的个数。
去掉之后也不会停不下来,只是拷贝过来的字符串比较长,程序会不停的输出,直到把str1遍历完毕
例如:
str1="abcabcdeabc"
这样的话,第一种写法,只会print五次,因为str1中有五种字符:'a' 'b' 'c' 'd' 'e'
第二种写法则会重复print输出11次,因为str1长度为11
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-13 08:58:52 | 显示全部楼层
怎么会停不下来???我看着能停啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-13 09:00:09 | 显示全部楼层
楼主的标题能再简单一些吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-13 09:47:24 | 显示全部楼层
sunrise085 发表于 2020-8-13 08:58
list1的作用就是同一个字符统计一次,不会多次重复统计同一个字符的个数。
去掉之后也不会停不下来,只是 ...

谢谢,能否再解释的详细一些?就是为啥list1的作用就是同一个字符统计一次?这个是怎么实现的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-13 10:19:30 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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',进行统计并输出了  a  3  ,并将字符'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',进行统计并输出了  a  3  ,第五个字符还是'a' ,再次输出 a 3 ,第11个字符还是'a' ,再次输出  a 3

若字符串有成百上千个字符实际上只有几十种不同的字符,那第二种写法就会不停的输出,感觉好像程序停不下来了。而第一种写法,只会输出这几十次,程序运行也会快很多,因为print非常耗费时间。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-13 10:27:21 | 显示全部楼层
wp231957 发表于 2020-8-13 09:00
楼主的标题能再简单一些吗

建议改为 NULL
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 11:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表