字符串、列表

字符串

def main():
    str1 = 'hello, world!'
    print(len(str1))   # 计算字符串的长度
    print(str1.capitalize())  # 首字母大写 'Hello, world'
    print(str1.upper())   # 字符串全部转变为大写 'HELLO, WORLD'
    print(str1)   # 通过上面的操作字符串str1没有改变,只是产生了新的字符串
    # 查找子串在字符串的位置,索引返回查找到的第一个字母的位置8
    print(str1.find('or')) 
    # index和find一样只是index没有查找到要报错
    prit(str1.index('or'))
    # print(str1.index('shit'))
    # 判断字符串是否以指定字符开头返回布尔值
    print(str1.startswith('He'))  # False
    print(str1.startswith('he'))  # True
    # 判断字符串是否以指定字符结尾也返回布尔值
    print(str1.endswith('!'))  # True
    # 将字符串以指定宽度居中,并在两侧填充指定支付
    print(str1.center(50, '*'))
    #将字符串以指定宽度靠右放置,并在左侧填充指定字符
    print(str1.rjust(50, ' ')) 
    str2 = 'abc123456' 
    print(str2.isdigit())# 判断是否全为数字
    print(str2.isalpha()) # 判断是否全为字母
    print(str2.isalnum()) #  判断是否由字母和数字组成
    # 字符串的下标运算
    print(str2[2]) # 从左往右我们取第一个字符是从0开始数所以取出的字符是c
    print(str2[-1]) # 从右往左我们取第一个是从-1开始的所以取出的是6
    print(str2[-3]) # 4
    # 字符串的切片运算
    # 字符串的切片运算是产生一个新的字符串
    print(str2[2:5])  # c12 从2开始索引取出下标为234的元素组成一个新的字符串
    print(str2[2:]) # c123456 从位置为2开始取出后面所有的元素
    print(str2[2::2]) # c246 从位置为2开始取出每两个取一个
    print(str2[:]) # abc123456取出全部的字符串并产生一个新的字符串,字符都是一样
    #但是两个不是同一个字符串                
    print(str2[::2]) # ac246 从0开始取出步长为2的所有元素
    print(str2[5::-2])# 31b  从第五个位置元素开始倒着每两个取一个
    print(str2[::-1]) # 654321cba 产生一个倒叙的新的字符串
    print(str2[-1:-3:-1]) # 65
    print(str2[-3:-1]) # 45

    str3 = '  jackfrued@126.com '
    print(str3.strip())# 消除字符串左右两边的空格 
if __name__ = '__main__':
    main()

通过字符串的切片运算我们就可以制作一个跑马灯内容为:
‘北京欢迎你,为你开天辟地……’
思路:str1 = ‘北京欢迎你,为你开天辟地……’
str2 = ‘京欢迎你,为你开天辟地……北’
str3 = ‘欢迎你,为你开天辟地……北京’
我们取第一个字符然后把第一个字符追加到srt2 = str[1:] + str1[0],这里就涉及到字符串的加法运算,字符串还可以做 ‘*’ ,有了这个思路我们就可以把跑马灯的程序写出来了如下:

# 这里的代码后面补上

列表

def main():
    list1 = [1, 3, 5, 7, 100]
    print(list1)
    list2 = ['hello'] * 5 # 列表可以做 '*' 和 '+' 法运算
    # '*'是对 列表元素的复制产生一个新的列表
    # '+'是对 列表做一个拼接产生一个新的列表
    print(list2)
    # 计算列表长度(元素个数)
    print(len(list1)) # 5
    # 下标(索引)运算
    print(list1[0]) # 1
    print(list1[4]) # 100
    # print(list1[5])  # IndexError: list index out of range
                       # 索引错误:超出列表索引范围
    print(list1[-1]) # 100
    print(list1[-3]) # 5
    list1[2] = 300  # 将列表位置为2的元素替换成300
    print(list1)
    # 添加元素
    list1.append(200) # 在列表的末尾追加元素会产生一个新的列表
    list1.insert(1, 400) # 在指定位置插入元素这里是在1这个位置插入400这个元素
    # 所以原先在1位置的元素就到了2这个位置
    list1 += [1000, 2000] # 列表的拼接,产生一个新的列表
    print(list1)   
    print(len(list1))
    # 删除元素
    list1.remove(3) # 将对象为3的元素删掉(注意这里不是索引值)
    # 这里要注意的是在使用remove()方法删除元素是,如果这元素在列表存在多个
    # 这里只能删除从左往右数的第一次出现的这个元素,后面的保留
    if 1234 in list1: # 判断1234这个元素是否在列表里,如果在就删除
        list1.remove(1234)
    del list1[0] # 删除位置为0的元素,这里是索引值
    print(list1)
    # 清空列表元素
    list1.clear()
    print(list1)


if __name__ == '__main__':
    main()

和字符串一样列表也可以做切片运算

def main():
    fruits = ['grape', 'apple', 'strawberry', 'waxberry']
    fruits += ['pitaya', 'pear', 'mango']
    # 循环遍历列表元素
    for fruit in fruits:
        print(fruit.title(), end=' ')
    # 这里的fruit.title()和fruit.capitalize()的效果一样把首字母大写
    print()
    # 列表切片
    fruits2 = fruits[1:4]
    print(fruits2)
    # fruit3 = fruits  # 没有复制列表只创建了新的引用*****
    # 可以通过完整切片操作来复制列表
    fruits3 = fruits[:]
    print(fruits3)
    fruits4 = fruits[-3:-1]
    print(fruits4)
    # 可以通过反向切片操作来获得倒转后的列表的拷贝
    fruits5 = fruits[::-1]
    print(fruits5)


if __name__ == '__main__':
    main()

列表的排序

def main():
    list1 = ['orange', 'apple', 'zoo', 'internationalization']
    list2 = sorted(list1)
    # sorted函数将list1排序后产生一个新的列表list2,但不会对list1的列表元素改变
    # 所以函数的设计就应该像sorted函数一样尽可能不产生副作用
    list3 = sorted(list1, reverse=True)
    # 通过key关键字参数指定根据字符串长度进行排序而不是默认的字母表顺序
    list4 = sorted(list1, key=len)
    print(list1)
    print(list2)
    print(list3)
    print(list4)
    # 给列表对象发出排序消息直接在列表对象上进行排序
    list1.sort(reverse=True)
    print(list1)


if __name__ == '__main__':
    main()

我们还可使用生成器语法来生成列表

import sys


def main():
    f = [x for x in range(1, 10)]
    print(f)
    f = [x + y for x in 'ABCDE' for y in '1234567']
    print(f)
    # 用列表的生成表达式语法创建列表容器
    # 用这种语法创建列表之后元素已经准备就绪所以需要耗费较多的内存空间
    list1 = [[0]] * 5
    print(list1)   #[[0], [0], [0], [0], [0]]
    # 如果我们想要产生一个[[0], [0,0], [0,0,0]...]
    list2 = [[0] * x for x in range(1, n)]  # n为大于1的正整数
    # 如果我们要产生一个[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]]
    list3 = [[0] * 3] * 5

    f = [x ** 2 for x in range(1, 1000)]
    print(sys.getsizeof(f))  # 查看对象占用内存的字节数
    print(f)
    # 请注意下面的代码创建的不是一个列表而是一个生成器对象
    # 通过生成器可以获取到数据但它不占用额外的空间存储数据
    # 每次需要数据的时候就通过内部的运算得到数据(需要花费额外的时间)
    f = (x ** 2 for x in range(1, 1000))
    print(sys.getsizeof(f))  # 相比生成式生成器不占用存储数据的空间
    print(f)
    for val in f:
        print(val)


if __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值