变位词检验,两个list进行双重for循环只能改变其中一个的值

在尝试写变位词检验时遇到的问题,如下:
想请问:为什么list中元素相同就不能改变它的值
  1. <blockquote>for i in lis1:
复制代码
  1. <blockquote>lis1 , lis2 = list("abcd"), list("bcad")
复制代码

完整代码见图
ps: 变位词,比如"heart"和"earth",字符一样而排列顺序不同。



attachments-2021-07-BUP7DhXm60e97608c544c.png

请先 登录 后评论

3 个回答

一个等待
为啥代码那样...再手敲一下,不好意思

for i in lis1:
    for j in lis2:
        if i == j:
            lis1[lis1.index(i)]=0
            lis2[lis2.index(j)]=1
print(lis1,lis2)      

问题是:
lis1, lis2 = list("abcd"), list("bcda")
一切正常,该怎么显示就怎么显示

但是:
lis1, lis2 = list("abcd"), list("aaaa")      #即其中一个是元素完全相同的list
--->    lis1[lis1.index(i)]=0
          ValueError: 'a' is not in list
请先 登录 后评论
大耳朵狗


看成conjugaison了。
sorted(s1)==sorted(s2)判断试试。

请先 登录 后评论
花瓣片儿


for i in lis1:
    for j in lis2:
        if i == j:
            lis1[lis1.index(i)]=0
            lis2[lis2.index(j)]=1
            break
print(lis1,lis2)
#加个break就好了,结果是只把lis2中的第一个'a'替换掉。因为第一次遍历到lis2的时候就已经把lis1的第一个元素变掉了,lis1中没有'a'了,i赋值是'a',第二次发现lis2中第二个元素还是'a',跟'i'相等,就会执行if后面的语句,但是index(i)找不到'a'的索引,所以报错。如果lis2是'dcba'互不相等的这种,每一个i只有一个j对应,就只会执行一次if后的语句,就没问题。
如果想改变lis2中的所有'a',则在改变lis2中元素之前利用元素把索引赋给一个临时变量,这个临时变量如果遍历到lis2的最后一个元素说明lis2全部被改变了,这个时候再改变lis1中的第一个元素
lis1, lis2 = list("abcd"), list("aaaa")
for i in lis1:
    for j in lis2:
        if i == j:
            tmp=lis2.index(j)
            lis2[lis2.index(j)]=1
            if tmp==len(lis2)-1:
                lis1[lis1.index(i)]=0
print(lis1,lis2)  
结果是[0, 'b', 'c', 'd'] [1, 1, 1, 1]

请先 登录 后评论
  • 3 关注
  • 0 收藏,599 浏览
  • 黑小黑咻 提出于 2021-07-10 18:27

相似问题