|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Nicole37 于 2023-11-16 17:31 编辑
序列:
元祖、字符串、列表:都属于序列
对序列的操作的运算符和函数:
1、运算符:+,*
- [1,2,3]+[4,5,6]
- [1, 2, 3, 4, 5, 6]
- (1,2,3)+(4,5,6)
- (1, 2, 3, 4, 5, 6)
- "sdf"*2
- 'sdfsdf'
- #对于增量赋值
- #ID 表示返回代表指定对象的唯一标识的整数值(身份证)
- #对于可变序列e.g列表来说
- s=[1,2,5]
- id(s)
- 34610376
- s*=2
- s
- [1, 2, 5, 1, 2, 5]
- id(s)
- 34610376
- #序列的内容变了,但id值不变
- #对于不可变序列:元祖和字符串,内容变,整体id值也会变
- r=(1,5)
- id(r)
- 68376712
- r*=3
- r
- (1, 5, 1, 5, 1, 5)
- id(r)
- 63438200
复制代码
2、is & is not用于检测对象的id值是否相等,判断是否是同一对象。同一性运算符
in & not in 判断包含问题,in 判断某个元素是否包含在序列中
- #is isnot
- x="love"
- y="love"
- x is y
- True
- x=[1,2]
- y=[1,2]
- x is not y
- True
- #in not in
- "ij" in "wefeij"
- True
- [1] in [[1],[2]]
- True
- "i" not in "i lobr uou"
- False
复制代码
3、del语句:用于删除一个或多个指定对象/用于删除可变序列中的指定元素
- #用del语句删除
- x=[1,2,3]
- y="fgd"
- del x,y
- x
- Traceback (most recent call last):
- File "<pyshell#42>", line 1, in <module>
- x
- NameError: name 'x' is not defined
- y
- Traceback (most recent call last):
- File "<pyshell#43>", line 1, in <module>
- y
- NameError: name 'y' is not defined
- #del 用于删除可变序列中的指定元素
- a = [1,2,3,4,5]
- del a[0]
- a
- [2, 3, 4, 5]
- #用切片来删除指定元素
- a[0:1]=[]
- a
- [3, 4, 5]
- #跳步
- p=[1,2,3,4,5]
- del p[::2]#从开始到最后删除元素,步进为2,删除1,跳两步删除3,跳两步删除5
- p
- [2, 4]
复制代码- #斩草除根
- a =[1,2,3]
- del a
- a
- Traceback (most recent call last):
- File "<pyshell#66>", line 1, in <module>
- a
- NameError: name 'a' is not defined
- #清空内容
- a =[1,2,3]
- del a[::]
- a
- []
- #可以用clear实现
- a.clear()
- a
- []
复制代码
作业:
编程0:
- s = input("请输入字符串s:")
- a=[]
- for i in s:
- a.append(i)
- t = input("请输入字符串t:")
- b=[]
- for j in t:
- b.append(j)
- c=[]
- for j in range(len(a)):
- if a[j] not in b:
- print("no")
- break
- else:
- if a[j] in b:
- c.append(b.index(a[j]))
- while len(c)==len(a):
- for i in range(len(c)-1):
- if int(c[i])<int(c[i+1]):
- continue
- print("ok")
- break
复制代码
1:
- s = input("请输入")
- a=[]
- b=[]
- d=[]
- l=0
- #字符串变列表,应用列表的排序
- for i in s:
- a.append(i)
- a.sort()
- for i in a:
- d.append(str(i))
- f="".join(d)#f是从小到大
- a.sort(reverse=True)
- for i in a:
- b.append(str(i))
- c="".join(b)#c是从大到小
- #把最小奇数找出来g
- for i in f:
- if int(i)%2!=0:
- g=i
- l=1 #l为找到有奇数的情况下,执行下一步的标志!
- break
- else:
- continue
- while l==1: #当有奇数时
- if int(c)%2!=0: #如果从大到小排序恰好是奇数,则找到
- print("输出",c)
- else:
- f=c.find(g)
- u=c[0:f]
- v=c[f+1::]
- h=u+v+g
- print("输出",h)#如果不是奇数,就把最小奇数拿出来放到末尾,利用字符串的拼接功能输出
- break
- while l==0: #当纯偶数时输出0
- print("输出",0)
- break
-
复制代码
作业答案:
0:在 Python 中,每一个对象都有三个基本属性:唯一标识、类型和值
1:根据是否能被修改这一特性,可以将序列分为可变序列和不可变序列:比如列表就是可变序列,而元组和字符串则是不可变序列
2:如果两个对象 a 和 b 的 id 值相同,那么 a is b 的运算结果就一定是 True
动手:
0:- s = input("请输入字符串s:")
- t = input("请输入字符串t:")
-
- n = len(s)
- m = len(t)
-
- j = k = 0
- while j < n and k < m:
- if s[j] == t[k]:
- j += 1
- k += 1
-
- if j == n:
- print("字符串 s 是字符串 t 的子序列。")
- else:
- print("字符串 s 不是字符串 t 的子序列。")
复制代码
代码清单的解题思路是利用了 “双指针” 追踪的方法。
j 和 k 是两个负责追踪匹配的指针,分别指向字符串 s 和 t 的初始位置,然后每次判断 s[j] 与 t[k] 是否相等,如果相等则两个追踪指针同时移动到下一个位置继续判断。
由于 “子序列” 的判定是允许中间 “删除一些字符”,因此每当 s[j] 与 t[k] 不相等的时候,k 指针移动到下一位,继续尝试匹配。
最终如果 j 等于字符串 s 的长度,也就说明了 s 整个字符串成功地被遍历了一遍,即证明 s 是 t 的子序列。 |
|