0.列表的extend()方法是否支持使用字符串来扩展列表。
支持,因为字符串也属于可迭代对象。extend()方法中的参数必须时可迭代对象。
1.append函数详解
- 基本使用
append()函数可以向列表末尾添加元素
语法
list.append(element)
参数
element:任何类型的元素
注意
向列表末尾添加一个元素,而并非任意位置。
-
任意类型元素
append()函数可以向列表末尾添加任意类型的元素。
普通类型元素如数值、字符串;集合类型元素如列表、元祖。 -
列表同步问题
(1)使用append()函数添加列表时,是添加列表的引用地址而不是添加列表内容,当被添加的列表发生变化时,添加后的列表也会同步发生变化。
(2)解决方案:分析可以看出问题的原因在于引用地址上面。所以我们可以使用copy.deepcopy()
函数深拷贝列表的内容而不是列表的引用地址。
·浅拷贝:拷贝对象的引用地址
·深拷贝:拷贝对象的内容
import copy
list2 = ['fishc']
b = [1, 2, 3]
list2.append(copy.deepcopy(b)) # 深拷贝列表b
print(list2)
b.append(4) # 列表b发生变化
list2.append(copy.deepcopy(b)) # 深拷贝列表b
print(list2)
输出:
- append()与extend()的区别
1.append()添加到是元素本身,而extend()添加的是元素的值;
2.append()可以添加所有类型的元素,而extend()只能添加序列;
例如,添加列表时,append()会添加整个列表,而extend()只会添加列表中的值。
list1 = ['fishc', 'fishb', 'fisha']
list2 = ['fishc', 'fishb', 'fisha']
list1.append([1,2,3])
print('append添加整个列表:', list1)
list2.extend([1,2,3])
print('extend添加列表的值:', list2)
输出:
2.编写一个程序,判断给定的字符串s中的括号的写法是否合法。
条件:
-
字符串仅包含’(‘、’)‘、’[‘、’]‘、’{‘、’}'这三对括号的组合;
-
左右括号必须成对编写,比如’()‘是合法的,’('则是非法的;
-
左右括号必须以正确的顺序闭合,比如’{()}‘是合法的,’{(})'则是非法的。
示例:
-
思路
本题还是有些难度的。总的来说就是先把所有的左括号依次放在一个临时列表中,当遇到一个右括号就看存放左括号的临时列表中有没有对应的左括号,如果有就删除掉这个已经判断过的左括号,进行下一次循环;
如此循环往复,到最如果所有的右括号都在对应的临时列表中找到了左括号,那么临时列表必定为空,说明每个括号都成对出现符合题目要求,这个字符串合法;
否则不合法(比如说遇到右括号时临时列表中什么都没有,或者所有的右括号都在临时列表中找到了对应的左括号但是临时列表中依旧剩余左括号,那就说明不合法) -
存在问题及解决方法
1.如果遇到的场景是类似’[()]‘这样的括号嵌套,也就是连续出现多个左括号,那么先出现的那个就不能急着去匹配,需要等到后面的匹配完再去匹配它,比如’[()]‘,就是得先匹配内部的’()‘,然后再匹配外部的’[]'。
2.右括号和左括号怎么判断他们匹配了:如果出现了右括号那就先把对它进行一次赋值把它转换为对应的左括号,这样接下来就可以放心的判断是不是相匹配的一对括号了。
3.if语句与多个or组合使用时应当注意书写规范,例如:
i= 0
if i == 1 or 5:
print(i)
这里就不是判断i是否等于1或者是否等于5,而是(if i == 1) or 5:
,这个判断语句前半段为False,后半段为5非零,即为True。所以整体判断语句为True,输出i = 0。要想判断i是否等于1或者是否等于5,就需要修改为:
i= 0
if i == 1 or i ==5:
print(i)
回到本题,代码如下:
s = input("请输入测试字符串:")
stack = []
for c in s:
if c == '(' or c == '{' or c == '[':
stack.append(c)
else:
if len(stack) == 0:
print("非法T_T")
break
if c == ')':
d = '('
elif c == ']':
d = '['
elif c == '}':
d = '{'
if stack.pop() != d:
print("非法T_T")
break
else:
if len(stack) == 0:
print("合法^o^")
else:
print("非法T_T")
结果如图: