python学习day007--字符串和常用数据结构

字符串

字符串就是零个和多个字符组成的有限序列。
在python中一般使用单引号或双引号表示。也可以用三个双引号表示折行。

print('hello')
print("hello")
s1="""hello
world
"""
print(s1)

运算符:
len( s) 返回s的长度

startswith():是否以某一字符串开头
endwith()是否以某一字符串结尾

isdigit():是否由数据组成
isalpha():是否由字母组成
isalnum():检查字符串是否以数字和字母构成

关于格式:
strip():去除两边空格
center(wide,""):将字符串在指定宽度居中,并且在两侧填充字符。
rjust(wide,""):将字符串在指定宽度右对齐,并且在左侧填充字符。

格式化输出字符串

print('%d * %d = %d' % (a, b, a * b))

字符串提供的方法来完成字符串的格式,代码如下所示。

print('{0} * {1} = {2}'.format(a, b, a * b))

print(f'{a} * {b} = {a * b}')
增加改动查找
+,连接两个字符串获得首字母大写 capitalize()not in/in,判断某个串是否在字符串中
*,重复字符串的内容所有单词首字母大写 title()[索引] 给索引找字符
所有字母大写 upper()[:] 通过切片找字符串
查找子串的位置 find()
# * 重复
s1 = 'hello ' * 3
print(s1) # hello hello hello
# + 连接
s2 = 'world'
s1 += s2
print(s1) # hello hello hello world

# 判断是否是字符串的子串
print('ll' in s1) # True
print('good' in s1) # False


str2 = 'abc123456'
# 从字符串中取出指定位置的字符(下标运算)
print(str2[2]) # c
# 字符串切片(从指定的开始索引到指定的结束索引)
print(str2[2:5]) # c12 不包括5
print(str2[2:]) # c123456
print(str2[2::2]) # c246 从零开始跳两个
print(str2[::2]) # ac246从零开始跳两个
print(str2[::-1]) # 654321cba
print(str2[-3:-1]) # 45 倒数
str1 = 'hello, world!'
# 通过内置函数len计算字符串的长度
print(len(str1)) # 13
# 获得字符串首字母大写的拷贝
print(str1.capitalize()) # Hello, world!
# 获得字符串每个单词首字母大写的拷贝
print(str1.title()) # Hello, World!
# 获得字符串变大写后的拷贝
print(str1.upper()) # HELLO, WORLD!
# 从字符串中查找子串所在位置
print(str1.find('or')) # 8
print(str1.find('shit')) # -1
# 与find类似但找不到子串时会引发异常
# print(str1.index('or'))
# print(str1.index('shit'))
# 检查字符串是否以指定的字符串开头
print(str1.startswith('He')) # False
print(str1.startswith('hel')) # True
# 检查字符串是否以指定的字符串结尾
print(str1.endswith('!')) # True
# 将字符串以指定的宽度居中并在两侧填充指定的字符
print(str1.center(50, '*'))
# 将字符串以指定的宽度靠右放置左侧填充指定的字符
print(str1.rjust(50, ' '))
str2 = 'abc123456'
# 检查字符串是否由数字构成
print(str2.isdigit())  # False
# 检查字符串是否以字母构成
print(str2.isalpha())  # False
# 检查字符串是否以数字和字母构成
print(str2.isalnum())  # True
str3 = '  3r.com '
print(str3)
# 获得字符串修剪左右两侧空格之后的拷贝
print(str3.strip())

列表

列表是类似java中的数组,它是值的有序序列,每个值都可以通过索引进行标识,定义列表可以将列表的元素放在[ ]中,可以使用for循环对列表元素进行遍历,也可以使用[]或[:]运算符取出列表中的一个或多个元素。

#定义列表
list1=[1,3,5,7]
print(list1)#[1, 3, 5, 7]
list=['string']*3
print(list)#['string', 'string', 'string']

#列表长度
print(len(list1))
#通过索引获取列表元素
print(list1[1]) #第2个,从0开始
print(list1[-1]) #倒数第一个

#修改列表中的元素
list1[1]=9 
print(list1) #[1, 9, 5, 7]

#通过索引循环遍历元素
for index in range(len(list1)):
    print(list1[index],end=' ')
print()
for elem in list1:
    print(elem,end=' ')
print(
# 通过enumerate函数处理列表之后再遍历可以同时获得元素索引和值
for index,elem in enumerate(list1):
    print(index,elem,end=' ')

对列表进行操作:

  1. 添加
    append()末尾添加元素
    insert(position,elem) 某个位置添加
    []+[] 通过合并添加。
list1 = [1, 3, 5, 7, 100]
# 添加元素
list1.append(200)
list1.insert(1, 400)
list1 += [1000, 2000]
print(list1) # [1, 400, 3, 5, 7, 100, 200, 1000, 2000]
print(len(list1)) # 9
  1. 删除
    remove(elem):删除指定元素
    pop(position):删除指定位置元素
    clear():清空整个列表
list1=[1,400, 3, 5, 7, 100, 200, 1000, 2000]
# 先通过成员运算判断元素是否在列表中,如果存在就删除该元素
if 3 in list1:
	list1.remove(3)
if 1234 in list1:
    list1.remove(1234)
print(list1) # [1, 400, 5, 7, 100, 200, 1000, 2000]
# 从指定的位置删除元素
list1.pop(0)
list1.pop(len(list1) - 1)
print(list1) # [400, 5, 7, 100, 200, 1000]
# 清空列表元素
list1.clear()
print(list1) # []
  1. 切片:对列表的复制或者将列表中的一部分取出来创建出新的列表.,如果从后面开始取,则可以将列表进行反转
fruits = ['grape', 'apple', 'strawberry', 'waxberry']
fruits += ['pitaya', 'pear', 'mango']
# 列表切片
fruits2 = fruits[1:4]
print(fruits2) # apple strawberry waxberry
# 可以通过完整切片操作来复制列表
fruits3 = fruits[:]
print(fruits3) # ['grape', 'apple', 'strawberry', 'waxberry', 'pitaya', 'pear', 'mango']
fruits4 = fruits[-3:-1]
print(fruits4) # ['pitaya', 'pear']
# 可以通过反向切片操作来获得倒转后的列表的拷贝
fruits5 = fruits[::-1]
print(fruits5) # ['mango', 'pear', 'pitaya', 'waxberry', 'strawberry', 'apple', 'grape']
  1. 排序
list1 = ['orange', 'apple', 'zoo', 'internationalization', 'blueberry']
# sorted函数返回列表排序后的拷贝不会修改传入的列表
list2 = sorted(list1)

#排序后进行反转
list3 = sorted(list1, reverse=True)

# 通过key关键字参数指定根据字符串长度进行排序而不是默认的字母表顺序
list4 = sorted(list1, key=len)
print(list1)#['orange', 'apple', 'zoo', 'internationalization', 'blueberry']
print(list2)#['apple', 'blueberry', 'internationalization', 'orange', 'zoo']
print(list3)#['zoo', 'orange', 'internationalization', 'blueberry', 'apple']
print(list4)#['zoo', 'apple', 'orange', 'blueberry', 'internationalization']

# 给列表对象发出排序消息直接在列表对象上进行排序
list1.sort(reverse=False)
print(list1)#['apple', 'blueberry', 'internationalization', 'orange', 'zoo']

元组

把多个元素组合到一起就形成了一个元组,所以它和列表一样可以保存多条数据。不同之处在于元组的元素不能修改。
我们已经有了列表这种数据结构,为什么还需要元组这样的类型呢?
元组中的元素是无法修改的,事实上我们在项目中尤其是多线程环境中可能更喜欢使用的是那些不变对象(一方面因为对象状态不能修改,所以可以避免由此引起的不必要的程序错误,简单的说就是一个不变的对象要比可变的对象更加容易维护;另一方面因为没有任何一个线程能够修改不变对象的内部状态,一个不变对象自动就是线程安全的。一个不变对象可以方便的被共享访问)。所以结论就是:如果不需要对元素进行添加、删除、修改的时候,可以考虑使用元组,当然如果一个方法要返回多个值,使用元组也是不错的选择。下面的代码演示了如何定义和使用元组。

# 定义元组
t = ('凭栏听雨客', 20, True, '福建泉州')
print(t)

# 获取元组中的元素
print(t[0])
print(t[3])

# 遍历元组中的值
for member in t:
    print(member)
# 重新给元组赋值
# t[0] = '王大锤'  # TypeError

# 变量t重新引用了新的元组原来的元组将被垃圾回收
t = ('李光', 20, True, '北京')
print(t)
# 将元组转换成列表
person = list(t)
print(person)
# 列表是可以修改它的元素的
person[0] = '李小龙'
person[1] = 25
print(person)
# 将列表转换成元组
fruits_list = ['apple', 'banana', 'orange']
fruits_tuple = tuple(fruits_list)
print(fruits_tuple)

集合

字典

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凭栏听雨客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值