鱼C论坛

 找回密码
 立即注册
查看: 1362|回复: 7

[已解决]Python小白从挖坑到脱坑之路017_关于list.index()

[复制链接]
发表于 2018-3-16 10:13:19 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 大头目 于 2018-3-19 08:50 编辑

挖坑:如下代码是本人每日一题164的答案,见23~26行,使用23~25能正常满足题目要求,但是如果用26则代替23~25行代码则无法满足题目要求,不明白为什么
脱坑(现阶段理解):
类似坑:


  1. def check_a(alpha):
  2.         a = ''
  3.         b = ''
  4.         output = ''
  5.         count = 0
  6.         for i in alpha:
  7.                 if i in check_str:
  8.                         count +=1
  9.                         if count < 3:
  10.                                 if not len(a):
  11.                                         a = i
  12.                                 else:
  13.                                         b = i
  14.                                         #print(a,b)
  15.                                 if a == b:
  16.                                         return None    #a和b一样return None
  17.                         else:
  18.                                 return None                #元音超过3个return None

  19.         if len(a) == len(b) == 1:
  20.                 beta = list(alpha)
  21.                 x = beta.index(a)
  22.                 y = beta.index(b)
  23.                 beta[x], beta[y] = b, a
  24.                 #beta[beta.index(a)], beta[beta.index(b)] = b, a
  25.                 for j in beta:
  26.                         output += j
  27.                 return output
  28.         else:
  29.                 return None      #其他不符合情况return None

  30. check_str = 'aeiou'
  31. alpha = input('请输入字符串:')
  32. print(check_a(alpha))
复制代码


每日一题题目:
元音字母 有:a,e,i,o,u五个, 写一个函数,交换字符串的元音字符位置。
假设,一个字符串中只有二个不同的元音字符。
二个测试用例:
输入 apple  输出 eppla
输入machin  输出 michan
不符合要求的字符串,输出None,比如:
输入 abca (两个元音相同) 输出 None
输入 abicod (有三个元音) 输入None
最佳答案
2018-3-16 16:13:02
大头目 发表于 2018-3-16 15:06
beta, beta = b, a  不等于先后执行beta=b     beta = a这两条语句吧。
见下面代码,应该是同时执行的吧 ...

具体解释你可以看上边那些我的解释,我把你的0和1 替换稍作修改

你看一下,然后在结合我的解释,看看能不能理解。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-16 10:35:52 | 显示全部楼层
如果使用26行的代码相当于没有换,所以结果不对

首先我们就以输入apple为例, 执行到26行前 a=‘a’ b=‘e’

然后执行beta[beta.index(a)], beta[beta.index(b)] = b, a

这句话我们可以分开来看,相当于先后执行beta[beta.index(a)]=b     beta[beta.index(b)] = a这两条语句

执行第一句,apple变成了epple,然后此时a,b所代表的内容没有改变,执行了第二句,index找到了第一个‘e’

出现的索引值,返回来了,实际就是刚刚被我们把 ‘a’ 替换成 ‘e’ 的第一个‘e’的索引值0,然后你执行beta[0] = a

此时a 还是 ‘a’,替换之后就又变回了apple,所以无法达到效果。可能表述不是很明白,不明白可以继续问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 10:47:39 | 显示全部楼层
如果上面的解释还没看懂的话,你可以在代码中加几行代码,这样,你就会看到效果,可能更好理解
123.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-16 15:06:35 | 显示全部楼层
Zmynx_2017 发表于 2018-3-16 10:35
如果使用26行的代码相当于没有换,所以结果不对

首先我们就以输入apple为例, 执行到26行前 a=‘a’ b= ...

beta[beta.index(a)], beta[beta.index(b)] = b, a  不等于先后执行beta[beta.index(a)]=b     beta[beta.index(b)] = a这两条语句吧。
见下面代码,应该是同时执行的吧
  1. >>> list1 = [0,1]
  2. >>> list1[0],list1[1] = list1[1],list1[0]
  3. >>> list1
  4. [1, 0]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 15:45:59 | 显示全部楼层
大头目 发表于 2018-3-16 15:06
beta, beta = b, a  不等于先后执行beta=b     beta = a这两条语句吧。
见下面代码,应该是同时执行的吧 ...

首先,他是依次执行的,不是同时执行两条语句的
其次,你这个例子不能说明任何问题,因为你的索引值是已经固定了的,
那条语句只是说明了这样可以交换对应索引值位置处的内容。可能有点绕。

最重要的是,你并没有看懂第26行代码,关键问题出在了哪。

你23~25行代码之所以能成功实现,是因为你引入了x,y变量,首先把a和e的索引值保存了
这个就和你刚才替换0和1位置是一个概念,你已经固定了索引值。然后替换索引值对应位置的内容

而你26行代码语句呢,如果是真的同时执行,那么没有问题,但是,它实际就是有先后关系,
先把a换了e,然后再准备将之前的e换成为a时,使用index索引就索引到了刚刚替换的e,然后又换回了a
所以,在最终结果上显示,他就是没有改变。实际是换了两次。

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

使用道具 举报

发表于 2018-3-16 15:51:27 | 显示全部楼层
本帖最后由 Zmynx_2017 于 2018-3-16 16:07 编辑

我的理解是没有什么问题的,至于你刚刚那个例子,就是0和1互换那个例子

可以这样理解,赋值语句先算的是右侧的结果,相当于list[1]、和list[0]已经

是确定的数字了,并且在左侧的索引值也是固定的索引值,

所以他可以成功替换出来,就比如我把代码稍作修改,你看一下结果
123.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 16:13:02 | 显示全部楼层    本楼为最佳答案   
大头目 发表于 2018-3-16 15:06
beta, beta = b, a  不等于先后执行beta=b     beta = a这两条语句吧。
见下面代码,应该是同时执行的吧 ...

具体解释你可以看上边那些我的解释,我把你的0和1 替换稍作修改

你看一下,然后在结合我的解释,看看能不能理解。
123.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-19 08:59:04 | 显示全部楼层
Zmynx_2017 发表于 2018-3-16 16:13
具体解释你可以看上边那些我的解释,我把你的0和1 替换稍作修改

你看一下,然后在结合我的解释,看看 ...

谢谢讲那么详细
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 15:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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