前景提要
需要用到的数据结构:列表、字典
字符串如何转换成列表?
例1:
“abcd”->[a,b,c,d]
str="abcd"
list=list(str)
例2:
“ad sc fv”->[ad,sc,fv]
str="ad sc fv"
list=str.split(' ')
如何给字典赋值
例1:
a={}#建立空字典
b="xx"
c=1
a[b]=c
print(a)
运行得:{“xxx”:1}
python中的循环体怎么写?
这里类比C语言:
for(int i=0;i<9;i++){
//to do
}
那么Python中的写法是:
for i in range(9):
pass
#或者
for i in range(0,9):
pass
解题思路
这一题应将要比较的两个字符串拆分成列表,并将列表中元素的索引值映射到对应元素上形成字典,比较形成的字典是否相等,若相等,则返回True,否则返回False。推演:
def test():
#初始化
pattern="abba"
str="dog cat cat dog"
#列表化
list1=list(pattern)
list2=str.split(str)
#求列表长
len1=len(list1)
len2=len(list2)
#依题意可知符合条件的情况下len1必然等于len2,因此这里作比较,若不相等,则直接返回False。
if len1!=len2:
return Flase
#符合条件,进入循环体
for i in range(len1):
#判断list1和list2的第i位元素是否作为键存在于各自的字典中,若都在,
if list1[i] in dic1 and list2[i] in dic1:
#判断键对应的值是否相等。为什么要判相等呢?后面看
if dic1[list1[i]]==dic2[list2[i]]:
#如果相等,继续执行循环体
continue
else:
#否则,说明两字符串不符合要求
return False
#若都不在,
elif list1[i] not in dic1 and list2[i] not in dic1:
#将它们加进字典,并将索引值设为键的值
dic1[list1[i]]=i
dic2[lsit2[i]]=i
#若一个在一个不在:
else:
#则一定不符合要求
return Flase
#若能遍历结束,说明是符合的
renturn True
解构:
1.list1=[a,b,b,a],list2=[dog,cat,cat,dog]。dic1={},dic2={}
2.第一轮循环,a不在dic1中,dog不在dic2中,字典元素追加,得:dic1={“a”:0},dic2={“dog”:0}
3.第二轮循环,b不在dic1张,cat不在dic2中,字典元素追加,得:dic1={“a”:0,“b”:1},dic2={“dog”:0,“cat”:1}
4.第四轮循环,b已在dic1中,cat已在dic2中.且dic1[“b”]=dic2[“cat”]=1,所以跳出当前循环继续.
5.第五轮循环,a已在dic1中,dog已在dic2中.且dic1[“a”]=dic2[“dog”]=0,所以跳出当前循环继续.
6.循环结束,返回True。