鱼C论坛

 找回密码
 立即注册
查看: 2809|回复: 8

[已解决]Python零基础20课,课后习题第0题

[复制链接]
发表于 2016-9-2 17:00:45 | 显示全部楼层 |阅读模式

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

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

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)

为什么后面的语句要在 if each not in list1前提下,第一次没有回添加,第二次不是就有记录了,为什么还会添加。
我学的是Python3,用win7,希望高手解答。
最佳答案
2017-5-8 08:33:36
本帖最后由 当回首遇上转身 于 2017-5-8 08:36 编辑

if each not in list1是为了去重
至于你说的计数为什么等于2,那是因为
str1.count(each)算的是str1数组里面each的个数
而如果要算list1里面each的个数就需要改成list1.count(each)并把list1.append(each)往前挪一挪
  1. str1 = "aabbc"
  2. list1 = []

  3. for each in str1:
  4.     if each not in list1:
  5.         list1.append(each)
  6.         if each == '\n':
  7.             print('\\n', list1.count(each))
  8.         else:
  9.             print(each, list1.count(each))
复制代码

来源: @小财迷


最后,提课程问题最好把来源网址贴一下,免得别人找
  1. 代码请这样发
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-2 21:16:19 | 显示全部楼层
把str1中的字符(去掉重复字符)添加到list1中 有什么问题吗。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-2 21:29:09 | 显示全部楼层
s='aabbc'
for i in s:
    print(s.count(i))
结果是:2 2 2 2 1
其实 if each not in list1:的目的就是去重,将还没有加入List1这个列表的字符,计算并加入
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-3 11:38:20 | 显示全部楼层
小财迷 发表于 2016-9-2 21:29
s='aabbc'
for i in s:
    print(s.count(i))

结果的确会是有重复,if each not in list1的确可以去重。可我还是不明白——但是有了这句,第一次出现‘a’的时候会打印‘a 1’,第二次出现‘a’的时候list1里面已经有‘a’了,为什么还会执行计数语句,为什么不直接跳过,然后发现‘b’,同样第二次出现‘b’的时候也应该会跳过呀。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-3 18:37:55 | 显示全部楼层
coffee_cat 发表于 2016-9-3 11:38
结果的确会是有重复,if each not in list1的确可以去重。可我还是不明白——但是有了这句,第一次出现‘ ...

str1 ="aabbc"
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 2
          b 2
          c 1
第一次出现a的时候,打印a 2,你可以执行下吧,

评分

参与人数 1荣誉 +2 鱼币 +3 贡献 +2 收起 理由
coffee_cat + 2 + 3 + 2

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-3 19:45:49 | 显示全部楼层
小财迷 发表于 2016-9-3 18:37
str1 ="aabbc"
list1 = []

我执行了,也看到了这样的结果,我的问题是为什么会出现这样的结果。就是说,if each not in list1才会执行下面的步骤,可当第一次出现a,a就被收录到list1了呀,后面再出现a的时候就不符合if each not in list1这个条件,为什么还会继续计数,从而生成a 2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-6 17:42:33 | 显示全部楼层
coffee_cat 发表于 2016-9-3 19:45
我执行了,也看到了这样的结果,我的问题是为什么会出现这样的结果。就是说,if each not in list1才会执 ...

str1.count(each)就已经统计出了这个字符的数量,统计字符数量是靠count方法实现的,而不是靠for循环,if each not in list1是为了不让重复打印一个字符出现的次数,否则遇到一个打印一次,但次数是一样的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-8 08:33:36 | 显示全部楼层    本楼为最佳答案   
本帖最后由 当回首遇上转身 于 2017-5-8 08:36 编辑

if each not in list1是为了去重
至于你说的计数为什么等于2,那是因为
str1.count(each)算的是str1数组里面each的个数
而如果要算list1里面each的个数就需要改成list1.count(each)并把list1.append(each)往前挪一挪
  1. str1 = "aabbc"
  2. list1 = []

  3. for each in str1:
  4.     if each not in list1:
  5.         list1.append(each)
  6.         if each == '\n':
  7.             print('\\n', list1.count(each))
  8.         else:
  9.             print(each, list1.count(each))
复制代码

来源: @小财迷


最后,提课程问题最好把来源网址贴一下,免得别人找
  1. 代码请这样发
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-6 11:13:52 | 显示全部楼层
当回首遇上转身 发表于 2017-5-8 08:33
if each not in list1是为了去重
至于你说的计数为什么等于2,那是因为
str1.count(each)算的是str1数组 ...

采用list1.count(each)并把list1.append(each)放到前面只会统计一次吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-22 13:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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