找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3629|回复: 3

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

1

主题

2

帖子

2

积分

贫民

积分
2
神经蛙_FaqJG 发表于 2021-1-14 20:27:28 | 显示全部楼层 |阅读模式
在尝试写变位词检验时遇到的问题,如下:
想请问:为什么list中元素相同就不能改变它的值
  1. <blockquote>for i in lis1:
复制代码
  1. <blockquote>lis1 , lis2 = list("abcd"), list("bcad")
复制代码

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



完整代码

完整代码
回复

使用道具 举报

1

主题

2

帖子

2

积分

贫民

积分
2
神经蛙_FaqJG  楼主| 发表于 2021-1-14 20:35:26 | 显示全部楼层
为啥代码那样...再手敲一下,不好意思

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
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2021-1-18 16:06:02 | 显示全部楼层
本帖最后由 sheeboard 于 2021-1-18 16:25 编辑

看成conjugaison了。
sorted(s1)==sorted(s2)判断试试。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

1

积分

贫民

积分
1
hellowo_f99ya 发表于 2021-1-21 11:32:07 | 显示全部楼层
本帖最后由 hellowo_f99ya 于 2021-1-21 13:46 编辑

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]
回复 支持 反对

使用道具 举报

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

本版积分规则

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