鱼C论坛

 找回密码
 立即注册
查看: 622|回复: 0

[学习笔记] 零py-(ep-24)

[复制链接]
发表于 2023-11-16 17:31:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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 的子序列。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 04:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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