【机器学习笔记】Python基础操作第二天

一、今日完成的任务

  • 字符串拼接
  • f-string和join方法拼接的区别
  • 创建表格的markdown语言
  • 可迭代对象
  • len( )计算字符串长度
  • 用索引取字符串里的单个字符
  • dir(对象)可以查看该对象的属性和方法等
  • python的比较运算
  • Python 中 bool 是 int 的子类
  • 字符串是不可变对象
  • append和__add__( )两个方法的区别
    今日学习用时2.5小时

二、学到的东西

  1. 三种方法拼接字符串

(1) 使用 “+” 运算符

str1 = 'Hello'
str2 = 'Python'
greeting = str1 + ' '+ str2
print(greeting)

(2) 使用f-string

greeting1 = f'{str1} {str2}'
print(greeting1)

(3) join方法
先在单引号里打上分隔符(比如说这里用的空格,你喜欢的话也可以用”🐱“ ^_^ ),然后join后面括号里的参数,必须是可迭代对象(下面有介绍可迭代对象)

greeting2 = ' '.join([str1,str2])
  1. 计算字符串长度和单个取出字符串里的字符
    len( )计算长度,用索引取单个字符
length = len(greeting)
first_char = greeting[0]
last_char = greeting[-1]
print(f'字符串长度{length}\n第一个字符:{first_char}\n最后一个字符:{last_char}')

输出:
在这里插入图片描述

最后一个字符的索引是“-1”

3.可迭代对象
join的参数必须是可迭代对象

网上有很多定义看不懂。我总结的:

可以被逐个以相同方式取出来的,类型相同的聚合类型,就是可迭代对象,包括元组、列表、字符串中的每一个字符。
进一步,如果更严谨,要注意:
①逐个取出来的东西,不一定类型完全相同,比如 [1, “hi”, True] 也是 list列表
重点是能逐个被取出,并在操作时一致对待
②可以使用for遍历的都是可迭代对象
③整数和浮点数不是容器,没法逐个取。人话就是它不是一个装了很多东西的袋子,没法一个一个掏东西出来。

  1. python的比较运算
    直接用比较运算符的结果就是布尔类型(bool)
score_a = 75
score_b = 90
is_a_higher = score_a > score_b
is_a_lower_or_equal = score_a <= score_b
is_different = score_a != score_b
print(f'''{score_a} 是否大于 {score_b}:{is_a_higher}
{score_a} 是否小于等于{score_b}:{is_a_lower_or_equal}
{score_a} 是否不等于{score_b}:{is_different}''')

输出结果:
在这里插入图片描述
ps:True 和 False 本质上其实是数字!这是因为 Python 中 bool 是 int 的子类,便于逻辑判断和数值运算融合~

print(int(True))   # 输出 1
print(int(False))  # 输出 0

三、明日学习计划

  • 列表的基础操作
  • for循环语句
  • 东西写太多了,下次搞个目录
    @浙大疏锦行

四、补充(放上面就显得很乱

  1. 字符串可以用索引取值,背后与list列表的关系

①首先,字符串像 list,但不是 list。
字符串行为上类似列表,比如可以:
用索引取值 s[0];
用切片 s[1:3];
用 len(s) 得长度;
用 for 循环遍历字符

但字符串里单个字符是不可变的(下面第三条讲为什么)。你不可以写:

greeting[0] = "H"  # ❌ 报错!

人话:你不能给已有的字符串单个字符赋值,只能查看单个字符是啥

②其次,在 Python 中,字符串实现了序列协议(Sequence Protocol),只要实现了 getitem(支持索引)和 len(支持长度),就可以像 list 一样访问。

greeting[0] 其实底层调用了 greeting.__getitem__(0)
  1. 啥是dir( )。和字典dict( )没关系
    dir() 是一个 内置函数,用来“查看某个对象能做什么
    在这里插入图片描述
    举个例子:
s = "hello"
print(dir(s))

会输出一大堆:

['__add__', '__class__', '__contains__', '__getitem__', 'capitalize', 'center', 'count', ...]

dir( )和dict( )的区别:
在这里插入图片描述
3. 字符串是不可变对象
你不能给已有的字符串单个字符赋值,你只能查看单个字符,因为字符串是不可变对象!
字符串和元组tuple都不可变,列表、字典和集合是可变的
在这里插入图片描述
例如,

t = (1, 2, 3)
t[0] = 10  # ❌ 报错:'tuple' object does not support item assignment

But,虽然 tuple 自己不能改内容,但如果你塞进它的东西本身是可变的,它是不会拦着你的!

t = ([1, 2], 3)
t[0].append(999)  # ✅ 合法哦!
print(t)  # 输出:([1, 2, 999], 3)

因为 tuple 的“不变”指的是它的结构不变,但内部可变对象的内容变了,它不管!

  1. append和__add__( )两个方法的区别

人话:
append是你自己手动调用的方法;
add()是系统里自己赋予“+”的行为方法,你用“+”,就是调用的__add__()。
例子:

a = [1, 2]
b = [3, 4]

# 系统自动调用 __add__()
c = a + b        # 等价于 a.__add__(b)

# 你手动调用 append
a.append(99)     # 把 99 加进 a 本身,不会生成新列表

  1. f-string和join方法拼接的区别

join在面对批量要拼接的字符串时,速度快很多
比如说,拼接 10000 个字符串:

import time

words = ["word"] * 10000

# 方法一:join
start = time.time()
"".join(words)
print("join耗时:", time.time() - start)

# 方法二:f-string 逐个拼接
start = time.time()
s = ""
for w in words:
    s += f"{w}"
print("f-string耗时:", time.time() - start)

结果:
在这里插入图片描述
原因:

特性joinf-string
内存分配效率一次性预估总长度、集中分配内存每次拼接都创建新字符串(旧的被丢弃)
底层机制内部用 C 实现,高效Python 层循环+字符串复制,非常慢
场景适配列表拼接、高性能需求少量变量拼接、结构清晰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值