task04

1、列表操作练习,列表lst 内容如下:
lst = [2, 5, 6, 7, 8, 9, 2, 9, 9]
请写程序完成下列操作:
1)在列表的末尾增加元素15

lst= [2, 5, 6, 7, 8, 9, 2, 9, 9]
lst.append(15) #在列表的末尾增加元素15,用append
#lst.extend([15])#用extend在列表末尾添加元素15
print("末尾增加元素15:")
print(lst)

运行结果:
末尾增加元素15:
[2, 5, 6, 7, 8, 9, 2, 9, 9, 15]
2)在列表的中间位置插入元素20

lst= [2, 5, 6, 7, 8, 9, 2, 9, 9]
lst.insert(5, 20)#在列表的中间位置(第5个元素后面)插入元素20
print("中间位置插入元素20:")
print(lst)

运行结果:
中间位置插入元素20:
[2, 5, 6, 7, 8, 20, 9, 2, 9, 9]
3)将列表[2, 5, 6]合并到lst中

lst= [2, 5, 6, 7, 8, 9, 2, 9, 9]
lst.append([2,5,6])#用append将列表[2, 5, 6]合并到列表中
print("将列表[2, 5, 6]合并到列表:")
print(lst)

运行结果:
将列表[2, 5, 6]合并到列表:
[2, 5, 6, 7, 8, 9, 2, 9, 9, [2, 5, 6]]
4)移除列表中索引为3的元素

lst= [2, 5, 6, 7, 8, 9, 2, 9, 9]
y = lst.pop(3)#移除列表中索引为3的元素
print("移除列表中索引为3的元素:")
print(lst)

运行结果:
移除列表中索引为3的元素:
[2, 5, 6, 8, 9, 2, 9, 9]
5)翻转列表里的所有元素

lst= [2, 5, 6, 7, 8, 9, 2, 9, 9]
lst=lst[::-1] #翻转列表里的所有元素
print("翻转列表里的所有元素:") #翻转列表里的所有元素
print(lst)

运行结果:
翻转列表里的所有元素:
[9, 9, 2, 9, 8, 7, 6, 5, 2]
6)对列表里的元素进行排序,从小到大一次,从大到小一次

lst= [2, 5, 6, 7, 8, 9, 2, 9, 9]
#对列表里的元素进行排序,从小到大一次,从大到小一次
lst.sort(reverse=True)#降序
print("降序:")
print(lst)
lst.sort(reverse=False)#升序
print("升序:")
print(lst)

运行结果:
降序:
[9, 9, 9, 8, 7, 6, 5, 2, 2]
升序:
[2, 2, 5, 6, 7, 8, 9, 9, 9]

2、修改列表
lst = [1, [4, 6], True]
请将列表里所有数字修改成原来的两倍

lst = [1,[4,6],True]
lst[0] = lst[0]*2 #将列表第一项修改为原来的两倍
#将列表第二项修改为原来的两倍
lst[1][0]=lst[1][0]*2
lst[1][1]=lst[1][1]*2
lst[2]*2#将列表第三项修改为原来两倍
print(lst)

运行结果:
[2, [8, 12], True]
3、leetcode 852题 山脉数组的峰顶索引:
如果一个数组k符合下面两个属性,则称之为山脉数组
数组的长度大于等于3
存在 i i i i i i >0 且 i < len ⁡ ( k ) − 1 i<\operatorname{len}(k)-1 i<len(k)1, 使得 k [ 0 ] < k [ 1 ] < … < k [ i − 1 ] < k [ j ] > k [ i + 1 ] … > k [ len ⁡ ( k ) − 1 ] \mathrm{k}[0]<\mathrm{k}[1]<\ldots<\mathrm{k}[\mathrm{i}-1]<\mathrm{k}[\mathrm{j}]>\mathrm{k}[\mathrm{i}+1] \ldots>\mathrm{k}[\operatorname{len}(\mathrm{k})-1] k[0]<k[1]<<k[i1]<k[j]>k[i+1]>k[len(k)1]

这个 i i i就是顶峰索引。

现在,给定一个山脉数组,求顶峰索引。

示例:

输入:[1, 3, 4, 5, 3]

输出:True

输入:[1, 2, 4, 6, 4, 5]

输出:False

class Solution:
    def peakIndexInMountainArray(self, A: list[int]) -> int:
    while(1):
        for i in range(len(A)):
            if A[i]<A[i+1]:
                k=len(A)-i
                if A[k-1]>A[k]:
                   print("True")
                   print("i")
                else:
                    print("False")
            else:
                print("False")
        break
    break
        return

4、元组概念

写出下面代码的执行结果和最终结果的类型,并分析为什么会出现这样的结果。
1)(1, 2)*2

x = (1,2)*2
print(x)
print(type(x))

运行结果:
(1, 2, 1, 2)

2)(1, )*2

y = (1,)*2
print(y)
print(type(y))

运行结果:
(1, 1)

3)(1)*2

z = (1)*2
print(z)
print(type(z))

运行结果:
2

分析结果:
1)创建元组可以用小括号 (),也可以什么都不用,为了可读性,建议还是用 ()。
2)元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用。
3)前面两个都是元组复制,第三个的括号被当成了运算符,没有实际意义。
5、1)拆包过程是什么?
拆包就相当于把元组中的元素拆分成单个的元素。
a.解压(unpack)一维元组(有几个元素左边括号定义几个变量)

t = (1, 10.31, 'python')
(a, b, c) = t
print(a, b, c)

运行结果: 1 10.31 python
b.解压二维元组(按照元组里的元组结构来定义变量)

t = (1, 10.31, ('OK', 'python'))
(a, b, (c, d)) = t
print(a, b, c, d)

运行结果:1 10.31 OK python
c.如果你只想要元组其中几个元素,用通配符「*」,英文叫 wildcard,在计算机语言中代表一个或多个元素。下例就是把多个元素丢给了 rest 变量。

t = 1, 2, 3, 4, 5
a, b, *rest, c = t
print(a, b, c)  
print(rest)

运行结果:
1 2 5
[3, 4]
d.如果你根本不在乎 rest 变量,那么就用通配符「*」加上下划线「_」。

t = 1, 2, 3, 4, 5
a, b, *_ = t
print(a, b) 

运行结果:1 2
2)a, b = 1, 2
上述过程属于拆包吗?

a,b=1,2
print(a,b)

运行结果:1 2
上述过程属于平行赋值,也属于拆包。这个赋值的过程,其实也就是拆包的过程,将元素的信息由变量接收它。但是在拆包的过程中,必须将右侧的所有信息全部拆完。所以如果没有可变参数的话,左侧的参数个数一定要等于右侧列表/元组内元素个数。平行赋值即等号左右两边的变量和值可以是多个,但是要保证数量一致。a,b=1,2即a=1,b=2
3)可迭代对象拆包时,怎么赋值给占位符?
在可迭代对象拆包时,使用_(单个元素),*_(连续多个元素)进行占位。
6、字符串函数回顾
1)怎么批量替换字符串中的元素?
replace(old, new [, max]) 把 将字符串中的old替换成new,如果max指定,则替换不超过max次

str = ' I Love English. '
print(str.strip().replace('I Love', 'We hate')) 

运行结果:We hate English.
2)怎么把字符串按照空格进行拆分?
split(str="", num) 不带参数默认是以空格为分隔符切片字符串,如果num参数有设置,则仅分隔num个子字符串,返回切片后的子字符串拼接的列表。

str5 = ' I Love LsgoGroup '
print(str5.strip().split())

运行结果:[‘I’, ‘Love’, ‘LsgoGroup’]
3)怎么去除字符串首位的空格?
lstrip([chars]) 截掉字符串左边的空格或指定字符。

str5 = ' I Love LsgoGroup '
print(str5.lstrip()) 

运行结果:I Love LsgoGroup
7、实现isdigit函数:实现函数isdigit, 判断字符串里是否只包含数字0~9
1)可直接利用

str1 = "一千一百零一"
str2 = "1101"
str3 = "a"
str4 = ","
print(str1.isdigit())
print(str2.isdigit())
print(str3.isdigit())
print(str4.isdigit())

运行结果:
False
True
False
False
2)简化

str = input("请您输入一串字符串:")
print(str.isdigit())

输入:123 运行结果:True
输入:ss 运行结果:False
3)函数表示

def isdigit(string):
    """
    判断字符串只包含数字
    :param string:
    :return:
    """
    for i in string:
        if (i >= '0' and i <= '9'):
            print("True")
        else:
            print("False")

8、leetcode 5题 最长回文子串:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例:
输入: “babad”
输出: “bab”
输入: “cbbd”
输出: “bb”
1)把每个字母当成回文串的中心
这里要考虑两种情况,回文串的长度为奇数或者偶数情况

#把每个字母当成回文串的中心
class Solution:
    def longestPalindrome(self, s: str) -> str:
        k = len(s)
        self.res = ""
        def sett(i,j):
            while i >= 0 and j < k and s[i] == s[j]:
                i -= 1
                j += 1
            if len(self.res) < j - i -1 :
                self.res = s[i+1:j]
        for i in range(k):
            sett(i,i)
            sett(i,i+1)
        return self.res

2)把每个字母当成回文串的结束

#把每个字母当成回文串的结束
class Solution:
    def longestPalindrome(self, s: str) -> str:
        if not s:
            return ""
        max_len = 1
        k = len(s)
        start = 0
        for i in range(1,n):
            even = s[i-max_len:i+1]#偶数
            odd = s[i - max_len-1:i+1]#奇数
            if i - max_len - 1 >= 0 and odd == odd[::-1]:
                start = i - max_len - 1
                max_len += 2
            elif i - max_len >=0 and even == even[::-1]:
                start = i - max_len
                max_len += 1
        return s[start: start+max_len]

你可能感兴趣的:(task)