Python学习笔记【week02day1】字符串 & list列表 & 赋值拷贝 vs 浅拷贝 vs 深拷贝

字符串 & list列表 & 赋值拷贝 vs 浅拷贝 vs 深拷贝

字符串

字符串是以单引号或者双引号括起来的任意文本,一个字符串由若干个任意字符组成。

  1. 字符串的输出(拼接)

    • print(str1 + str2)
    • print(str1, str2)
    • print("%s %s" %(str1, str2))
    • print("{} str3 {}".format(str1, str2)) 现在流行用.format取代%s
    • join()函数
      list = [“str1”, “str2”, “str3”]
      print(“str4”.join(list))
      str4str1 str2 str3
    • 字符的重复输出 :str1*n
      print(“str”*50)
  2. 字符串的截取
    str1[start:stop:step]
    参数一:从start开始取 默认0
    参数二:到stop结束, stop取不到,默认len(str1)
    参数三:步长 默认1 可以为负
    - 下标索引【】 str1[0]
    - 取值范围【0,len(str1)】
    - 索引可以为负数,可从-1开始,-1表示倒数第一个字符
    - e.g.
    str1 = “hello world”
    str1[start: stop :step]
    str1[ : : -1] 倒序输出字符串
    str1[ : 3 :-1] dlrow o (倒序输出至下标3)
    str1[ 3 : : -1] lleh 从下标开始输出字符串,步长为-1(从下角标3开始往前输出)
    (注意):
    左对齐: %-05d 左对齐不会补“0”
    右对齐:%05d

  3. 字符串常用函数

  • eval(str)
    功能:将字符串str当成有效的表达式来求值并返回计算结果。

可以把list,tuple,dict, set和string相互转化

其实就是提取“”(引号)中间的内容

>>>num1 = eval('123')
>>>print(num1)
123

>>>num2 = eval("[1, 2, 3]")
>>>print(num2)
[1, 2, 3]

>>> num3 = eval("12-3")
>>> print(num3)
9

将字符串转成list: str(x)
e.g.
list1 = ["hello","world"]
str2 = str(list)
  • len(str)
    功能:返回当前字符串的长度(计算字符串长度)

  • str.lower() 大写转小写

  • str.upper() 小写字母转换为大写字母

  • str.swapcase()

把字符串中的大写字母转为小写字母,小写字母转换为大写字母

>>> str = "Hello World"
>>> print(str.swapcase())
hELLO wORLD
  • str.capitalize()

返回一个首字母大写,其他小写的字符串

>>> str = "Hello World"
>>> print(str.capitalize())
Hello world
  • str.title()

返回一个每个单词首字母大写的字符串

>>> str = "Hello World"
>>> print(str.title())
Hello World
  • str.center(width[, fillchar])

功能:返回一个指定宽度的居中字符串,fillchar为填充的字符,默认使用空格

>>> str = "Hello World"
>>> print(str.center(50,"*"))
*******************Hello World********************
  • str.ljust(width[, fillchar])

功能:返回一个指定宽度的左对齐字符串,fillchar为填充字符。默认使用空格填充

>>> str = "Hello World"
>>> print(str.ljust(50,"*"))  注意:“*”只能是一个字符
Hello World***************************************
  • str.rjust(width[, fillchar])

功能:返回一个指定宽度右对齐字符串,fillchar为填充字符,默认使用空格填充

>>> str = "Hello World"
>>> print(str.rjust(50,"*"))
***************************************Hello World
  • str.zfill(width)

功能:返回一个长度为width字符串,原字符串右对齐,前面补0

>>> str = "Hello World"
>>> print(str.zfill(50))
000000000000000000000000000000000000000Hello World
  • str.count(str 【,start】【, end】)

功能:返回字符串中str出现的次数,可以指定一个范围,若不指定则默认从头到尾,匹配的时候是区分大小写的。

>>> str1 = "Hello World"
>>> print(str1.count("hello", 0 , 10))
0
  • str.find(str1【, start】【, end】)

功能:从左到右检测str1字符串是否包含在字符串中,可以指定范围,默认从头到尾。

返回的是第一次出现的开始的下标,若未查询到,则返回-1

>>> str = "Hello World"
>>> str1 = "llo"
>>> print(str.find(str1, 0 , 10))
2
  • str.rfind(str1【, start】【, end】)

功能:类似于str.find(),不过是从右边开始查找

>>> str = "Hello World"
>>> str1 = "llo"
>>> print(str.rfind(str1, 0 , 10))
2
  • str.index(str1[, start = 0] ,[ end = len(str)])

功能:类似于find(),与find() 不同的是,如果str1不存在的时候会报一个异常

>>> str2 = "Hello World"
>>> str1 = "hello"
>>> print(str2.index(str1, 0 , 10))
ValueError: substring not found
  • str.lstrip()

功能:截掉字符串左侧指定的字符串,则默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ')

>>> str = '**** you are very good'
>>> print(str.lstrip())
**** you are very good
>>> print(str.lstrip("*"))
 you are very good
  • str.rstrip()

功能:截掉字符串右侧指定的字符串,则默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ')

>>> str = '**** you are good****'
>>> print(str.rstrip())
**** you are good****
>>> print(str.rstrip("*"))
**** you are good
  • str.strip()

功能:截掉字符串左右两侧指定的字符串,则默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ')

>>> str1 = "      hello world     "
>>> str1.strip()
'hello world'
  • string.split(str="", num=string.count(str))

功能:以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串

str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。 num – 分割次数

>>> str1 = "hello you are good"
>>> str1.split()
['hello', 'you', 'are', 'good']
>>> str1.split(" ",2)
['hello', 'you', 'are good ']

list列表

  1. 本质:list列表的本质是一种有序的集合
    有序:能用下标索引

  2. 创建:在列表中元素的数据类型可以不同(灵活性)

    list3 = [33, “good”, True, 10.32]
    print(list3)

  3. 列表元素的访问

列表的取值

功能:访问list列表中元素值

语法:列表名[索引]

list4 = [22, 33, 12, 32, 45]
#下标从0开始,最大值为len(list4)-1
print(list4[0])

注意:当索引值大于len(list4)-1的时候,会出现以下错误:

print(list4[5])
IndexError: list index out of range

这个错误就是下标越界【下标超出了可表示的范围】

3.2 列表元素的替换

功能:更改列表元素的值

语法:列表名[下标] = 值

list4 = [22, 33, 12, 32, 45]
list4[0] = "hello"
print(list4[0])

4.列表函数

  • list.append(元素/列表)

功能:在列表中末尾添加新的元素【在原本的列表中追加元素】

注意:append()中的值可以是列表也可以是普通元素

>>> list1 = [3, 4, 6]
>>> list1.append(6)
>>> print(list1)
[3, 4, 6, 6]
  • list.extend(列表)

功能:在列表的末尾一次性追加另外一个列表中的多个值

注意:extend()中的值只能是列表/元组[一个可迭代对象],不能是元素

>>> list1 = [1,2,3]
>>> list2 = [3, 4,5]
>>> list1.extend(list2)
>>> print(list1)
[1, 2, 3, 3, 4, 5]
  • list.insert(下标值, 元素/列表)

功能:在下标处插入元素,不覆盖原本的数据,原数据向后顺延

注意:插入的数据可以是元素也可以为列表

>>> list1 = [1,2,3]
>>> list1.insert(1,0)
>>> print(list1)
[1, 0, 2, 3]
>>> list1.insert(1,[2, 4, 8])
>>> print(list1)
[1, [2, 4, 8], 0, 2, 3]
  • list.pop(下标值)

功能:移除列表中指定下标处的元素(默认移除最后一个元素),并返回移除的数据

>>> list1 = [1, [2, 4, 8], 0, 2, 3]
>>> list1.pop()
3
>>> print(list1)
[1, [2, 4, 8], 0, 2]
>>> list1.pop(2)
0
>>> print(list1)
[1, [2, 4, 8], 2]
  • list.remove(元素)

功能:移除列表中的某个元素第一个匹配结果

>>> list1 = [1, 2, 3]
>>> list1.remove(2)
>>> print(list1)
[1, 3]
  • list.clear()

功能:清除列表中所有的数据

>>> list1 = [1, 2, 3]
>>> list1.clear()
>>> print(list1)
[]
  • list.index(object[, start】[, stop])

功能:从指定的范围的列表中找出某个值第一匹配的索引值

若不指定范围,则默认是整个列表。

>>> list1 = [1, 2, 3]
>>> list1.index(2)
1
>>> list1.index(4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 4 is not in list

注意:若在列表中找不到这个元素,则会报错。

  • list.count(元素)

功能:查看元素在列表中出现的次数

>>> list1 = [1, 2, 3, 1]
>>> list1.count(1)
2
  • len(list)

功能: 获取元素列表个数

>>> list1 = [1, 2, 3, 1]
>>> len(list1)
4
  • max(list)

语法:获取列表中的最大值

>>> list1 = [1, 2, 3, 1]
>>> max(list1)
3
  • min(list)

语法:获取列表中的最小值

>>> list1 = [1, 2, 3, 1]
>>> min(list1)
1
  • list.reverse()

语法: 列表倒叙

>>> list1 = [1, 2, 3, 1]
>>> list1.reverse()
>>> print(list1)
[1, 3, 2, 1]
  • list.sort()

语法:列表排序 默认升序

>>> list1 = [1, 2, 3, 1]
>>> list1.sort()
>>> print(list1)
[1, 1, 2, 3]

三种拷贝

1. 赋值拷贝/引用拷贝

地址相同,会相互影响
语法:list1 = [1, 2, 3]

    list2 = list1

>>> list1 = [1, 2, 3, 1]
>>> list2 = list1
>>> print(list2)
[1, 2, 3, 1]
>>> print(id(list1))
4314476424
>>> print(id(list2))
4314476424

2. 浅拷贝

不完全内存拷贝: list2 = list1.copy()

语法:list1 = [1, 2, 3]

    list2 = list1.copy()

>>> list1 = [1, 2, 3, 1]
>>> list2 = list1.copy()
>>> print(list2)
[1, 2, 3, 1]
>>> print(id(list2))
4314525320
>>> print(id(list1))
4314524808

注意:浅拷贝为一维内存拷贝,开辟了新的内存空间
**但是只对一维数组“深拷贝”**二维数组仍指向同一个内存地址

3. 深拷贝

完全内存拷贝 内存地址不同,互不影响
导入“copy”头文件: import copy
list2 = copy.deepcopy(list)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值