Task04:列表、元组和字符串——2020.01.28
-
06.列表 [list]
列表(list):有序、可更改、可重复,任意类型。
重点 【】 ,
thislist = ["apple", "banana", "cherry"] #列表每个元素用“”括起来 print(thislist[1]) print(thislist[-1]) #负索引表示从末尾开始,-1 表示最后一个项目,-2 表示倒数第二个项目,依此类推。 print(thislist[2:5]) #2、3、4
list()函数将元组、range对象、字符串或其他类型的可迭代对象类型的数据转换为列表。
range()创建列表
x = list(range(10,1,-2)) #起始数,结尾数,每数间隔 y = list(range(1,10,2)) print(x,type(x)) print(y,type(y))
列表中所保存的是对象的指针。
[1,2,3]
,有3个指针和3个整数对象。x = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]] #里面的[]为一个元素,4*3二位列表,外层*里层 for i in x: print(x,i) x = [[0,1,2] for row in [0,1,2,3]] # a for i in [ ] 是当i每等于列表里的一个元素时,i = a,用a给列表赋值 for i in x: print(x,i) x = [[0]*3]*4 #4*3列表 *重复操作的意思 """ a = [0]*3 #这三个0的位置指向相同 x = [a]*4 """ x[0][1] = 1 print(x)
添加:
x = [[1,2,3]] x.append([4,5,6]) #加一个列表在后面 x.extend([7,8,9]) #将列表拆开加后面 print(x)
删除:
x = ["1","2","3"] x.remove("1") #remove移除指定元素 print(x) x.pop() #pop移除第几个元素,默认是最后一个 print(x) y = x.pop() #pop可以将移除的元素赋值 print(x) del x[0:2] #从0开始,删除两个 print(x)
拷贝:
list1 = [123, 456, 789, 213] list2 = list1 list3 = list1[:] #浅拷贝 list1.sort() #排序 print(list1) print(list2) #跟list1一起变 print(list3) #列表不变,只是赋值一个本身的
07.元组 [tuple]
(1,2,3) 创建后不能修改,不能赋值给元组,仅可以更改里面的元组里列表里对应的元素。
其他的功能跟列表类似。
t1 = (123, 456) t2 = (456, 123) t3 = t1 + t2 t4 = t1 * 3 print(t3,t4) #(123, 456, 456, 123) (123, 456, 123, 456, 123, 456)
count
和index
两种方法。t = ("iii","aaaaa") print(t.count("iii")) #count('XXX') 是记录在元组 t 中该元素出现几次 print(t.index("iii")) #index("XXX") 是找到该元素在元组 t 的索引 #XXX是数字的时候不用加”“
解压元组(给元组里的元素赋别名)
08.字符串
\ print("a'b") #a'b print("a\'b") #a'b print("a\nb") #a #b print("a\\b") #a\b print("a\tb") #a b print("a\rb") #b print(r"C:\\Program Files") #C:\\Program Files 前面加一个r使得后面的\语句失效 str1 = "I Love LsgoGroup" print(str1[:6]) #空格也算一个,前面默认是从0开始 print(str1[5])
练习部分
-
列表操作练习
练习题:
1、列表操作练习
列表lst 内容如下
lst = [2, 5, 6, 7, 8, 9, 2, 9, 9]
请写程序完成下列操作:
-
在列表的末尾增加元素15
-
在列表的中间位置插入元素20
-
将列表[2, 5, 6]合并到lst中
-
移除列表中索引为3的元素
-
翻转列表里的所有元素
-
对列表里的元素进行排序,从小到大一次,从大到小一次
lst = [2, 5, 6, 7, 8, 9, 2, 9, 9] lst.append(15) print(lst) lst = [2, 5, 6, 7, 8, 9, 2, 9, 9] lst.insert(4,20) print(lst) lst = [2, 5, 6, 7, 8, 9, 2, 9, 9] lst.extend([2,5,6]) print(lst) lst = [2, 5, 6, 7, 8, 9, 2, 9, 9] lst.pop(3) print(lst) lst = [2, 5, 6, 7, 8, 9, 2, 9, 9] lst.reverse() print(lst) lst = [2, 5, 6, 7, 8, 9, 2, 9, 9] lst.sort() print(lst) lst = [2, 5, 6, 7, 8, 9, 2, 9, 9] lst.sort(reverse=True) print(lst) [2, 5, 6, 7, 8, 9, 2, 9, 9, 15] [2, 5, 6, 7, 20, 8, 9, 2, 9, 9] [2, 5, 6, 7, 8, 9, 2, 9, 9, 2, 5, 6] [2, 5, 6, 8, 9, 2, 9, 9] [9, 9, 2, 9, 8, 7, 6, 5, 2] [2, 2, 5, 6, 7, 8, 9, 9, 9] [9, 9, 9, 8, 7, 6, 5, 2, 2]
2、修改列表
问题描述:
lst = [1, [4, 6], True]
请将列表里所有数字修改成原来的两倍
lst = [1, [4, 6], True] lst[0]*=2 lst[1][0]*=2 lst[1][1]*=2 lst[2]*=2 print(lst)
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[i−1]<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) -> int: for i in range(1,len(A)): if A[i-1]<A[i]>A[i+1]: return i test = [1, 2, 4, 6, 4, 5] s = Solution() print(s.peakIndexInMountainArray(test))
-
-
元组操作练习
练习题:
1、元组概念
写出下面代码的执行结果和最终结果的类型
print((1, 2)*2) #(1, 2, 1, 2) print((1, )*2) #(1, 1) 元组中*为重复 print((1)*2) #2 为2*1
2、拆包过程是什么?
a, b = 1, 2
上述过程属于拆包吗?
属于拆包
可迭代对象拆包时,怎么赋值给占位符?
*rest 或 *_
-
字符串操作练习
字符串函数回顾
-
怎么批量替换字符串中的元素?
str.replace()
-
怎么把字符串按照空格进⾏拆分?
str.split()
-
怎么去除字符串⾸位的空格?
str.lstrip()
-
-
实现
isdigit
函数题目要求
实现函数isdigit, 判断字符串里是否只包含数字0~9
def isdigit(string): for i in string: if i >= "0" and i <= "9" : continue else: return False return True string = input() print(isdigit(string)) 2222 True
-
leetcode练习题
给定一个字符串
s
,找到s
中最长的回文子串。你可以假设s
的最大长度为 1000。示例:
输入: “babad”
输出: “bab”
输入: “cbbd”
输出: “bb”
class Solution: def longestPalindrome(self, s: str) -> str: long = 0 for i in range(len(s)): index = s.rfind(s[i]) if index != i: b = s[i:index + 1] l = len(b) if l % 2 == 0: b1 = b[0:l // 2] b2 = b[l // 2:] else: m = b[(l - 1) // 2] b1, b2 = b.split(m, 2) if b1 == b2[::-1] and l > long: substr = b long = l return substr a = Solution() result = a.longestPalindrome('cbbd') # 测试 print(result)