Task04 列表、元组和字符串

1. 列表

定义:[]表示整体,每个元素用,隔开。有序集合,没有固定大小,能够保存任意数量任意剋性的Python对象。
创建:
(1)普通列表
(2)range
(3)推导式
(4)数组
(5)混合
(6)空列表

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
x = list(range(10))
x = list(range(1, 11, 2))
x = [0] * 5
x = [0 for i in range(5)]
x = [i for i in range(10)]
x = [i for i in range(100) if (i % 2 != 0) and (i % 3 == 0)]
x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
x = [[0] * 3 for row in range(4)]

# x = [a] * 4操作中,只是创建4个指向list的引用,a一旦改变,x中的4个a也随之改变。
x = [[0] * 3] * 4
x[0][0] = 1

mix = [1, 'lsgo', 3.14, [1, 2, 3]] 
empty = []

向列表中添加元素:
(1)list.append(obj):列表末尾添加新的对象,可以是任意类型,被追加的元素在list中保持原结构类型。
(2)list.extend(seq):列表末尾一次性追加另一个序列中的多个值。
(3)list.insert(index, obj):指定位置添加某元素。
删除列表中的元素:
(1)list.remove(obj):移除某个值的第一个匹配项。
(2)list.pop([index=-1]):移除某个位置的元素,默认是最后一个元素,并返回该元素值。
(3)del var1[, var2, …]:删除单个或多个对象。
获取列表中的元素:
(1)单个元素:

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
print(x[0])

(2)多个元素:切片

x = [123, 456, 789, 213]
x1 = x
x2 = x[:]

x.sort() # x1随之改变,x2不变
x[2] = 546 # x1随之改变,x2不变

list1 = [[123, 456], [789, 213]]
list2 = list1
list3 = list1[:]

list1[0][0] = 111 # list2、list3都随之改变

常用操作符:
==:列表中元素、位置都一致时才返回True。
+:首尾拼接;*:复制拼接。需要消耗额外的没存,尽量不用,多用 append, extend, insert。
其他方法:
list.count(obj):统计某元素出现的次数。
list.reverse():反向列表中的元素。
list.sort(key=None, reverse=False):key – 用来比较的元素,指定可迭代对象中的一个元素进行排序。reverse – True(降序),False(升序,默认)
练习题:
(1)列表操作练习

lst = [2, 5, 6, 7, 8, 9, 2, 9, 9]
lst.append(15)
lst.insert(len(lst) // 2, 20)
lst.extend([2, 5, 6])
lst.pop(3)
lst.reverse()
lst.sort()
lst.sort(reverse=True)

(2)修改列表:把列表中所有数字修改为原来的两倍。

lst = [1, [4, 6], True]
for i in range(len(lst)):
    if type(lst[i]) == list:
        l = len(lst[i])
        for j in range(l):
            if type(lst[i][j]) == int:
                lst[i][j] *= 2
    elif type(lst[i]) == int:
        lst[i] *= 2

print(lst)

(3)给定一个山脉数组,求顶峰索引。

class Solution:
    def peakIndexInMountainArray(self, A):
        if len(A) < 3:
            print("False")
        else:
            max = A[0]
            for nums in A:
                if nums > max:
                    max = nums
                    j = A.index(nums)
            # print(max, j)
            k = 0
            for i in range(len(A) - 1):
                if (i < j and A[i] >= A[i + 1]) or (i > j and A[i] <= A[i + 1]):
                    k += 1

            if k == 0:
                print('True')
            else:
                print('False')

if __name__ == '__main__':
    result = Solution()
    A = [1, 3, 4, 5, 3]
    result.peakIndexInMountainArray(A)

2. 元组

**定义:**用()把元素绑在一起,用,隔开不同元素。
创建和访问:
与列表类似,不同的是列表使用方括号,元组使用圆括号,且元组内的元素不能修改,除非是元组中的元素为列表这种可修改的形式。

a = (1, 3, [2, 5])
a[2][1] = 0           #(1, 3, [2, 0])
a[1] = 0              #TypeError: 'tuple' object does not support item assignment.

创建元组可以使用小括号,也可以不使用。建议使用提高可读性。
元组中只包含一个元素时,要在元素后加逗号,否则不会认为是元组。
访问时也可以有索引和切片两种形式。
更新和删除:
+的形式把不同元组或元组的不同部分连接起来。

week = ('Monday', 'Tuesday', 'Thursday', 'Friday')
week = week[:2] + ('Wednesday', ) + week[2:]
print(week)

内置方法:
元组的大小和内容都不能修改,因此只有count和index两种方法。
tuple.count(obj):记录该元素在元组中出现的次数。
tuple.index(obj):找到该元素的索引。
解压元组
(1)解压一维元组
(2)解压二维元组
(3)解压多维元组

t = (1, 10.31, 'python')
(a, b, c) = t           # 一维
t = (1, 10.31, ('ok', 'python'))
(a, b, (c, d)) = t      # 二维
t = (1, 2, 3, 4, 5)
a, b, *rest, c = t      # 把多个元素丢给了*rest变量

练习题:
(1)元组概念

(1, 2) * 2            #(1, 2, 1, 2)
(1, ) * 2             #(1, 1)
(1) * 2               # 2

(1, 2) (1, ) 是一个完整的元组,* 表示复制。
(1) 括号内无逗号,括号看作运算符,* 表示相乘。
(2)拆包
拆包是把元组里的元素单拉出来分别赋给不同的变量。不仅元组可以,所有的可迭代对象都可以。

a, b = 1, 2               # 属于拆包过程
a, b, _, _ = 1, 2, 3, 4   
a, b, *_ = 1, 2, 3, 4     # 赋值给占位符

3. 字符串

**定义:**引号(单、双)之间的字符集合。不同字符串之间可用+连接。若想在字符串中间加引号,需用转义字符。
常见的转义字符:

转义字符描述
\\反斜杠
\’单引号
\"双引号
\n换行
\tTab
\r回车
print('Let\'s go!')
print("Let's go!")
print('C:\\now')
print("C:\\Program files\\Intel")
print(r"C:\Program files\Intel")

切片与拼接:
和列表与元组类似。
常用内置方法:

内置函数功能
capitalize()首字母大写
lower()大写转小写
upper()小写转大写
swapcase()大写转小写,小写转大写
count(str, beg=0,end=len(string))统计 str 出现的次数
endswith(suffix,beg=0,end=len(string))是否以suffix结束
startswith(substr,beg=0,end=len(string))是否以substr开始
find(str,beg=0,end=len(string))从左边开始找str,返回索引值;不包含返回-1
rfing(str,beg=0,end=len(string))从右边开始找str
isnumeric()判断字符串中是否全为数字字符
ljust(width[, fillchar])从左边补全字符串至width长度,默认用0补
rjust(width[, fillchar])从右边补全字符串
lstrip([chars])删除左边的空格或指定字符
rstrip([chars])删除右边的空格 或指定字符
strip([chars])同时执行lstrip和rstrip
partition(sub)分割成三部分,pre-sub,sub,fol-sub,或’原字符串’,’ ‘,’ ’
rpartition(sub)从右边开始分割
replace(old,new[,max])用new替换old,max为最大替换次数
split(str="",num)默认以空格分割字符串,也可以指定字符,num表示仅分割num个字符串
splitlines([keepends])按行(’\t’ ‘\n’ ‘\t\n’)分割字符串,keepends=False(默认)不保留’\n’,keepends=True保留’\n’。
maketrans(intab,outtab)创建字符映射的转换表
translate(table,deletechars="")用转换表转换字符串中的字符,过滤掉的字符放在deletechars中。

字符串格式化:
两种方法:format 和 格式化操作符。
(1)format
两种参数:位置参数和关键字参数。

str = "{0} love {1}".format('I', 'Lsgogroup')   #位置参数
str = "{a} love {b}".format(a='I',b='Lsgogroup')   #关键字参数

(2)格式化操作符

符号描述
%c格式化字符及其ASCⅡ码
%s格式化字符串,用str()的方法处理对象
%r格式化字符串,用rper()方法处理对象
%d格式化整数
%o格式化无符号八进制数
%x格式化无符号十六进制数
%X格式化无符号十六进制数(大写)
%f格式化浮点数,可指定小数精度
%e用科学计数法的形式格式化浮点数
%E同上
%g根据值的大小选择用%f 或%e
%G同上

练习:

  1. 字符串函数回顾
    (1)怎么批量替换字符串中的元素?replace 函数。
    (2)怎么把字符串按照空格进行划分?split 函数。
    (3)怎么去除字符串首位的空格?lstrip 函数。
  2. 实现isdigit 函数:判断字符串中是否只包含数字0~9。
def isdigit(string):
    """    判断字符串只包含数字
    :param string:
    :return:
    """
    # your code here
    #return  string.isnumeric()
    for i in string:
        if not(48 <= ord(i) <= 57):
            return False
    return True
print(isdigit('231p'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值