欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python第四章 列表 元组 字符串

程序员文章站 2022-03-27 12:57:40
Python第四章 列表 元组 字符串列表定义创建列表添加元素元组字符串Python数据类型和容器类型类型类型表示整型class ‘int’>浮点型布尔型列表元组字典集合字符串<...


Python数据类型和容器类型

类型 类型表示
整型 class ‘int’>
浮点型 <class ‘float’>
布尔型 <class ‘bool’>
列表 <class ‘list’>
元组 <class ‘tuple’>
字典 <class ‘dict’>
集合 <class ‘set’>
字符串 <class ‘str’>

列表

定义

列表是有序集合,没有固定大小,能够保存任意数量任意类型的 Python 对象,语法为 [元素1, 元素2, …, 元素n]。

创建

  • 创建list方式有,直接赋值,rang()定义,推导世定义,定义复合list:==不初始化的话都会自动赋值
#--------------------直接赋值定义list-----------------
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(x, type(x))
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] <class 'list'>

x = [2, 3, 4, 5, 6, 7]
print(x, type(x))
# [2, 3, 4, 5, 6, 7] <class 'list'>

#--------------------range()定义list-----------------
# [10, 8, 6, 4, 2] <class 'list'>
// 默认从0开始自动填充,遵循(起点,终点,步长)-包前不包后原则
x = list(range(10))
print(x, type(x))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <class 'list'>

x = list(range(1, 11, 2))
print(x, type(x))
# [1, 3, 5, 7, 9] <class 'list'>

x = list(range(10, 1, -2))
print(x, type(x))


#--------------------推倒式 定义list-----------------
x = [0] * 5
print(x, type(x))
# [0, 0, 0, 0, 0] <class 'list'>

x = [0 for i in range(5)] #0 重复5次,但每次i等于次数
print(x, type(x))
# [0, 0, 0, 0, 0] <class 'list'>

x = [i for i in range(10)] #同上 就是一个for循环的简单使用
print(x, type(x))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <class 'list'>

x = [i for i in range(100) if (i % 2) != 0 and (i % 3) == 0]
print(x, type(x))

# [3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99] <class 'list'>

#--------------------定义复合list-----------------
x = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [0, 0, 0]]
print(x, type(x))
# [[1, 2, 3], [4, 5, 6], [7, 8, 9], [0, 0, 0]] <class 'list'>

for i in x:
    print(i, type(i))
# [1, 2, 3] <class 'list'>
# [4, 5, 6] <class 'list'>
# [7, 8, 9] <class 'list'>
# [0, 0, 0] <class 'list'>

# col 列。row行。for前面的部分相当于for循环中的循环体!
x = [[0 for col in range(3)] for row in range(4)]
print(x, type(x))
# [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>

x[0][0] = 1 #只能初始化[0][0]号元素
print(x, type(x))
# [[1, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>

x = [[0] * 3 for row in range(4)]
print(x, type(x))
# [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>

x[1][1] = 1
print(x, type(x))
# [[0, 0, 0], [0, 1, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>

由于list的元素可以是任何对象,因此列表中所保存的是对象的指针。即使保存一个简单的[1,2,3],也有3个指针和3个整数对象。

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

  • 创建混合列表
mix = [1, 'lsgo', 3.14, [1, 2, 3]]
print(mix, type(mix))  
# [1, 'lsgo', 3.14, [1, 2, 3]] <class 'list'>
  • 创建一个空列表
empty = []
print(empty, type(empty))  # [] <class 'list'>

列表不像元组,列表内容可更改 (mutable),因此附加 (append, extend)、插入 (insert)、删除 (remove, pop) 这些操作都可以用在它身上。

列表添加元素

  • list.append(obj) 列表末尾添加新的对象,只接受一个参数,参数可以是任何数据类型,被追加的元素在 list 中保持着原结构类型。
  • list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.append('Thursday')
print(x)  
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Thursday']

print(len(x))  # 6

#---------------------注意添加一个list的区别----
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.append(['Thursday', 'Sunday'])
print(x)  
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', ['Thursday', 'Sunday']]

print(len(x))  # 6
list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
【例子】

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.extend(['Thursday', 'Sunday'])
print(x)  
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Thursday', 'Sunday']

print(len(x))  # 7

**list.append(list)**是将list作为一个整体,一个元素添加到list末尾(得到的是一个复合型的list);**list.extend(list)**是将list到每一个元素一个一个添加到原来的list 到末尾(得到的是一个同类型的list);

  • list.insert(index, obj) 在编号 index 位置插入 obj。

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.insert(2, 'Sunday')
print(x)
# ['Monday', 'Tuesday', 'Sunday', 'Wednesday', 'Thursday', 'Friday']

print(len(x))  # 6

删除一个list元素

  • **ist.remove(obj) **移除列表中某个值的第一个匹配项
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.remove('Monday')
print(x)  # ['Tuesday', 'Wednesday', 'Thursday', 'Friday']
  • **list.pop([index=-1]) **移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
y = x.pop()  #默认-1,也就是最后一个元素
print(y)  # Friday

y = x.pop(0)
print(y)  # Monday

y = x.pop(-2)
print(y)  # Wednesday
print(x)  # ['Tuesday', 'Thursday']

remove 和 pop 都可以删除元素,前者是指定具体要删除的元素,后者是指定一个索引。

  • ** del var1[, var2 ……] ** 删除单个或多个对象。

如果知道要删除的元素在列表中的位置,可使用del语句。

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
del x[0:2]
print(x)  # ['Wednesday', 'Thursday', 'Friday']

如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句;如果你要在删除元素后还能继续使用它,就使用方法pop(),出栈的意思。

获取list元素

  • 第一种是类似java数组直接角标获取。
x = ['Monday', 'Tuesday', 'Wednesday', ['Thursday', 'Friday']]
print(x[0], type(x[0]))  # Monday <class 'str'>
  • 第二种是切片获取(包前不包后,步长)
>list=[012345]
>list[5]= [01234]
>list[0]=[012345]
>list[15]=[ 1234]
>list[]=[ 012345]
>list[052]=[024]
>list[05-1]=[5,4,3,2,1,0]
  • “浅拷贝(=)和深拷贝([ :])”
list1 = [123, 456, 789, 213]
list2 = list1
list3 = list1[:]

print(list2)  # [123, 456, 789, 213]
print(list3)  # [123, 456, 789, 213]
list1.sort()
print(list2)  
# [123, 213, 456, 789]  #直接等号赋值的等同于第二个list指针还是指向原来的list,原来的发生改变,复制后的list必然改变
print(list3)  
# [123, 456, 789, 213]	#这个属于复制的备份,与源无关;

list常用操作符

  • 等号操作符:= =
    连接操作符 +
    重复操作符 *
    成员关系操作符 in、not in
    「等号 ==」,只有成员、成员位置都相同时才返回True。

列表拼接有两种方式,用「加号 +」和「乘号 *」,前者首尾拼接,后者复制拼接。

【例子】

list1 = [123, 456]
list2 = [456, 123]
list3 = [123, 456]

print(list1 == list2)  # False
print(list1 == list3)  # True

list4 = list1 + list2  # extend()
print(list4)  # [123, 456, 456, 123]

list5 = list3 * 3
print(list5)  # [123, 456, 123, 456, 123, 456]

list3 *= 3
print(list3)  # [123, 456, 123, 456, 123, 456]

print(123 in list3)  # True
print(456 not in list3)  # False

前面三种方法(append, extend, insert)可对列表增加元素,它们没有返回值,是直接修改了原数据对象。 而将两个list相加,需要创建新的 list 对象,从而需要消耗额外的内存,特别是当 list 较大时,尽量不要使用 “+” 来添加list

list其他方法

  • ==list.count(obj) ==统计某个元素在列表中出现的次数
list1 = [123, 456] * 3
print(list1)  # [123, 456, 123, 456, 123, 456]
num = list1.count(123)
print(num)  # 3
  • ==list.index(x[, start[, end]]) ==从列表中找出某个值第一个匹配项的索引位置
list1 = [123, 456] * 5
print(list1.index(123))  # 0
print(list1.index(123, 1))  # 2
print(list1.index(123, 3, 7))  # 4
  • list.reverse() 反向列表中元素
x = [123, 456, 789]
x.reverse()
print(x)  # [789, 456, 123]
  • list.sort(key=None, reverse=False) 对原列表进行排序。

key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序
reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
该方法没有返回值,但是会对列表的对象进行排序。


x = [123, 456, 789, 213]
x.sort()
print(x)
# [123, 213, 456, 789]

x.sort(reverse=True)
print(x)
# [789, 456, 213, 123]


# 获取列表的第二个元素--def自定义函数
def takeSecond(elem):
    return elem[1]


x = [(2, 2), (3, 4), (4, 1), (1, 3)]
x.sort(key=takeSecond)
print(x)
# [(4, 1), (2, 2), (1, 3), (3, 4)]

#lambda作为一个表达式,定义了一个匿名函数, 参数:函数体->等同与 def g(x):return x[0],
x.sort(key=lambda a: a[0])
print(x)
# [(1, 3), (2, 2), (3, 4), (4, 1)]
  • lambda作为一个表达式,定义了一个匿名函数, lambda x:x[0] 等同与 def g(x):return x[0],

元组

定义

  • 定义语法为:(元素1, 元素2, …, 元素n) tuple小括号–被创建后就不能对其进行修改,类似字符串

创建和访问元组

  • 元组与列表类似,也用整数来对它进行索引 (indexing) 和切片 (slicing)
t1 = (1, 10.31, 'python')
t2 = 1, 10.31, 'python'
print(t1, type(t1))
# (1, 10.31, 'python') <class 'tuple'>

print(t2, type(t2))
# (1, 10.31, 'python') <class 'tuple'>

tuple1 = (1, 2, 3, 4, 5, 6, 7, 8)
print(tuple1[1])  # 2
print(tuple1[5:])  # (6, 7, 8)
print(tuple1[:5])  # (1, 2, 3, 4, 5)
tuple2 = tuple1[:]
print(tuple2)  # (1, 2, 3, 4, 5, 6, 7, 8)
  • 创建元组可以用小括号 (),也可以什么都不用,为了可读性,建议还是用 ()。
    元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用
x = (1)
print(type(x))  # <class 'int'>
x = 2, 3, 4, 5
print(type(x))  # <class 'tuple'>
x = []
print(type(x))  # <class 'list'>
x = ()
print(type(x))  # <class 'tuple'>
x = (1,)
print(type(x))  # <class 'tuple'>
---------------------------
print(8 * (8))  # 64
print(8 * (8,))  # (8, 8, 8, 8, 8, 8, 8, 8)
  • 复合元组
x = (1, 10.31, 'python'), ('data', 11)
print(x)
# ((1, 10.31, 'python'), ('data', 11))

print(x[0])
# (1, 10.31, 'python')
print(x[0][0], x[0][1], x[0][2])
# 1 10.31 python

print(x[0][0:2])
# (1, 10.31)
  • 在元组中新增一个元素-本质是掰开,复制,插入,赋值
week = ('Monday', 'Tuesday', 'Thursday', 'Friday')
week = week[:2] + ('Wednesday',) + week[2:]
print(week)  # ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')
  • 元组有不可更改 (immutable) 的性质,因此不能直接给元组的元素赋值,但是只要元组中的元素可更改 (mutable)-list等,那么我们可以直接更改其元素,注意这跟赋值其元素不同
t1 = (1, 2, 3, [4, 5, 6])
print(t1)  # (1, 2, 3, [4, 5, 6])

t1[3][0] = 9
print(t1)  # (1, 2, 3, [9, 5, 6])``python

元组相关操作-同list

等号操作符:==
连接操作符 +
重复操作符 *
成员关系操作符 in、not in
「等号 ==」,只有成员、成员位置都相同时才返回True。

元组拼接有两种方式,用「加号 +」和「乘号 *」,前者首尾拼接,后者复制拼接。

t1 = (123, 456)
t2 = (456, 123)
t3 = (123, 456)

print(t1 == t2)  # False
print(t1 == t3)  # True

t4 = t1 + t2
print(t4)  # (123, 456, 456, 123)

t5 = t3 * 3
print(t5)  # (123, 456, 123, 456, 123, 456)

t3 *= 3
print(t3)  # (123, 456, 123, 456, 123, 456)

print(123 in t3)  # True
print(456 not in t3)  # False

元组其他操作

  • 元组大小和内容都不可更改,因此只有== count 和 index ==两种方
t = (1, 10.31, 'python')
print(t.count('python'))  # 1
print(t.index(10.31))  # 1

count(‘python’) 是记录在元组 t 中该元素出现几次,显然是 1 次
index(10.31) 是找到该元素在元组 t 的索引,显然是 1

  • 解压元组(去掉括号,把数据拿出来)
t = (1, 10.31, 'python')
(a, b, c) = t
print(a, b, c)

元组里面什么类型,解压出去后要用相同的类型依次接收

  • 如果你只想要元组其中几个元素,用通配符「*」,英文叫 wildcard,在计算机语言中代表一个或多个元素。下例就是把多个元素丢给了 rest 变量。
t = 1, 2, 3, 4, 5
a, b, *rest, c = t
print(a, b, c)  # 1 2 5
print(rest)  # [3, 4]

# 如果你根本不在乎 rest 变量,那么就用通配符「*」加上下划线「_」。

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

# 1 10.31 python

字符串

定义

“”. ''双引号或者单引号里面的字符集就是字符串 <class ‘str’>

  • Python 的常用转义字符
转义字符 描述
\\ 反斜杠符号
\’ 单引号
\" 双引号
\n 换行
\t 横向制表符(TAB)
\r 回车
  • 原始字符串只需要在字符串前边加一个英文字母 r 即可,就是不要任何的转义!!。
print(r'C:\Program Files\Intel\Wifi\Help')  
  • 三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符
para_str = """这是一个多行字符串的实例
多行字符串可以使用制表符
TAB ( \t )。
也可以使用换行符 [ \n ]。
"""
print(para_str)
# 这是一个多行字符串的实例
# 多行字符串可以使用制表符
# TAB (    )。
# 也可以使用换行符 [
#  ]。

切片

1,类似于元组具有不可修改性
2,从 0 开始 (和 Java 一样)
3,切片通常写成 start:end 这种形式,包前不包后。
4,索引值可正可负,正索引从 0 开始,从左往右;负索引从 -1 开始,从右往左。使用负数索引时,会从最后一个元素开始计数。最后一个元素的位置编号是 -1。

str1 = 'I Love LsgoGroup'
print(str1[:6])  # I Love
print(str1[5])  # e
print(str1[:6] + " 插入的字符串 " + str1[6:])  
# I Love 插入的字符串  LsgoGroup

s = 'Python'
print(s)  # Python
print(s[2:4])  # th
print(s[-5:-2])  # yth
print(s[2])  # t
print(s[-1])  # n

常用内置方法

  • capitalize() 将字符串的第一个字符转换为大写。
  • lower() 转换字符串中所有大写字符为小写。
    upper() 转换字符串中的小写字母为大写。
    swapcase() 将字符串中大写转换为小写,小写转换为大写。

  • count(str, beg= 0,end=len(string)) 返回str在 string 里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数。默认整个字符串范围
str2 = "DAXIExiaoxie"
print(str2.count('xi'))  # 2

1,endswith(suffix, beg=0, end=len(string)) 检查字符串是否以指定子字符串 suffix 结束,如果是,返回 True,否则返回 False。如果 beg 和 end 指定值,则在指定范围内检查。
2,==startswith(substr, beg=0,end=len(string)) ==检查字符串是否以指定子字符串 substr 开头,如果是,返回 True,否则返回 False。如果 beg 和 end 指定值,则在指定范围内检查。

  • find(str, beg=0, end=len(string)) 找str是否存在,是,返回第一个索引值,没有则-1;
  • == rfind(str, beg=0,end=len(string)) ==类似于 find() 函数,不过是从右边开始查找-正反找 xi和ix,找xi是x的正向索引;ix是I的反向索引
  • isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False
str2 = "DAXIExiaoxie"
print(str2.find('xi'))  # 5
print(str2.find('ix'))  # -1。也就是i的反向索引值
print(str2.rfind('xi'))  # 9
----------------
str3 = '12345'
print(str3.isnumeric())  # True
str3 += 'a'
print(str3.isnumeric())  # False
  • partition(sub) 找到第一个子字符串sub,然后以sub为中间元素才拆分成3个部分,如果字符串中不包含sub则返回(‘原字符串’,’’,’’)。
  • rpartition(sub)类似于partition()方法,不过是从右边开始查找。
str5 = ' I Love LsgoGroup '
print(str5.strip().partition('o'))  # ('I L', 'o', 've LsgoGroup')
print(str5.strip().partition('m'))  # ('I Love LsgoGroup', '', '')
print(str5.strip().rpartition('o'))  # ('I Love LsgoGr', 'o', 'up')
  • replace(old, new [, max]) 把 将字符串中的old替换成new,如果max指定,则替换不超过max次。
str5 = ' I Love LsgoGroup '
print(str5.strip().replace('I', 'We'))  # We Love LsgoGroup
  • split(str="", num) 不带参数默认是以空格为分隔符,且默分割所有分分割点切片字符串,如果num参数有设置,从左开始数,要取几个分割点。
str5 = ' I Love LsgoGroup '
print(str5.strip().split())  # ['I', 'Love', 'LsgoGroup']
print(str5.strip().split('o'))  # ['I L', 've Lsg', 'Gr', 'up']
--------------------------
u = "www.baidu.com.cn"
# 分割一次
print((u.split(".", 1)))  # ['www', 'baidu.com.cn']

# 分割两次
print(u.split(".", 2))  # ['www', 'baidu', 'com.cn']
----------------------------
# 以换行符 \n为分割点
c = '''say
hello
baby'''

print(c)
# say
# hello
# baby

print(c.split('\n'))  # ['say', 'hello', 'baby']

------------------------------
string = "hello boy<[www.baidu.com]>byebye"
print(string.split('[')[1].split(']')[0])  # www.baidu.com
print(string.split('[')[1].split(']')[0].split('.'))  # ['www', 'baidu', 'com']

格式化输出字符串

  • format 格式化函数,就是在字符串中加入参数;
str8 = "{0} Love {1}".format('I', 'Lsgogroup')  # 位置参数
print(str8)  # I Love Lsgogroup

str8 = "{a} Love {b}".format(a='I', b='Lsgogroup')  # 关键字参数
print(str8)  # I Love Lsgogroup

str8 = "{0} Love {b}".format('I', b='Lsgogroup')  # 位置参数要在关键字参数之前!!!!!
print(str8)  # I Love Lsgogroup

str8 = '{0:.2f}{1}'.format(27.658, 'GB')  # 除了有位置信息,还有该位置的的格式信息--保留小数点后两位
print(str8)  # 27.66GB
  • Python 字符串格式化符号
符 号 描述
%c 格式化字符及其ASCII码
%s 格式化字符串,用str()方法处理对象
%r 格式化字符串,用rper()方法处理对象
%d 格式化整数
%o 格式化无符号八进制数
%x 格式化无符号十六进制数
%X 格式化无符号十六进制数(大写)
%f 格式化浮点数字,可指定小数点后的精度
%e 用科学计数法格式化浮点数
%E 作用同%e,用科学计数法格式化浮点数
%g 根据值的大小决定使用%f或%e
%G 作用同%g,根据值的大小决定使用%f或%E

形参和实参前面都要带上%

print('%c' % 97)  # a
print('%c %c %c' % (97, 98, 99))  # a b c
print('%d + %d = %d' % (4, 5, 9))  # 4 + 5 = 9
print("我叫 %s 今年 %d 岁!" % ('小明', 10))  # 我叫 小明 今年 10!
print('%o' % 10)  # 12
print('%x' % 10)  # a
print('%X' % 10)  # A
print('%f' % 27.658)  # 27.658000
print('%e' % 27.658)  # 2.765800e+01
print('%E' % 27.658)  # 2.765800E+01
print('%g' % 27.658)  # 27.658
text = "I am %d years old." % 22
print("I said: %s." % text)  # I said: I am 22 years old..
print("I said: %r." % text)  # I said: 'I am 22 years old.'
  • 格式化操作符辅助指令
符号 功能
m.n m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)
- 用作左对齐
+ 在正数前面显示加号( + )
# 在八进制数前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’(取决于用的是’x’还是’X’)
0 显示的数字前面填充’0’而不是默认的空格
print('%5.1f' % 27.658)  # ' 27.7'
print('%.2e' % 27.658)  # 2.77e+01
print('%10d' % 10)  # '        10'
print('%-10d' % 10)  # '10        '
print('%+d' % 10)  # +10
print('%#o' % 10)  # 0o12
print('%#x' % 108)  # 0x6c
print('%010d' % 5)  # 0000000005

本文地址:https://blog.csdn.net/DMULLQ/article/details/107643015

相关标签: Python