-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnote.txt
More file actions
88 lines (83 loc) · 5.07 KB
/
note.txt
File metadata and controls
88 lines (83 loc) · 5.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
date: 2026.1.31
1.元组:坐标系想到元组,因为不可变、自动去重想到集合、列表不兼容
2.判断奇数偶数顺序的方法:if index%2==0/1
date: 2026.2.1
1.按照行/字符遍历文件:
with open('input/day_03.txt', 'r') as file_object:
input_text = file_object.read()。 ———— #把文件所有内容读成「一个完整的大字符串」,所以遍历的时候是每读一个字符#
for line in file_object:————#这种遍历的就是按行拆,得到的是文件对象 =read() → split('\n') #
2.print(repr(内容)):
能够显示隐藏字符,如\n
3.strip()与split():
整理数据形式时很常用
eg:# clean_line = line.strip() #括号不传参数时,默认删除字符串「开头 + 结尾」的所有「空白字符」
# if clean_line: #用布尔值判断,提取有效字符、防止有空行返回空值
4.方法的返回值
(1)只修改不赋值(append/sort):返回None,只需调用,不要赋值
eg:clean_input=clean_input.append(clean_line)————#错误写法
(2)处理并返回新值(strip/split):返回有效结果,需要赋值给变量使用。
5.字典与二维列表
(1)字典:无规律、需要快速按 “标识” 查数据,比如存学生信息
(2)二维列表:有规律、按 “位置 / 范围” 操作数据,比如包含位置信息的网格
# 空二维列表
light_grid = []
# 建1000x1000网格(1000行,每行1000列,初始全False)
for x in range(1000):
row = [] # 每一行的列表
for y in range(1000):
row.append(False)
light_grid.append(row)
# 取/改数据:通过行下标x + 列下标y
light_grid[0][0] = True # (0,0)位置的灯,改成开
print(light_grid[0][0]) # 输出True
date: 2026.2.1
1.字典中的遍历:
(1)只遍历键:#写法1:直接遍历字典(默认遍历键)for k in student:
#写法2:用 .keys() 方法(明确指定遍历键,可读性更高)for k in student.keys():
(2)只遍历值:#用 .values() 方法遍历所有值 for v in student.values()
(3)遍历键和值:#用 .items() 方法同时遍历键和值,k接收键,v接收值 for k, v in student.items():
2.map()的用法
x1, y1 = map(int, pos1.split(","))
date: 2026.2.4
1.环形边界问题,没思路的时候可以用例子演化逻辑
2.批量注释:cmd+/
批量缩进/反缩进:tab,shift+tab
3.%取模运算:
在 Python 中计算: -5 % 100 = 95。
date: 2026.2.5
1.无参数函数:参数被硬编码到函数中,直接写函数名便可执行,可直接调用赋值
def get_input_data():
with open('input/2025_day_01.txt', 'r') as f:
return [line.strip() for line in f if line.strip()]
2.函数复用:
def calc_answer(instructions, part2=True):
total = sum(instructions) # 公共基础逻辑(两部分都需要)
if part2:
total = total * 2 # Part2进阶逻辑(仅微调)
return total # 根据part2的值,返回对应结果
执行 Part2(默认,常用场景):无需传额外参数,直接调用 calc_answer([1,2,3]),返回12;
执行 Part1(偶尔用):仅传一个参数切换,调用 calc_answer([1,2,3], part2=False),返回6
date: 2026.2.8
1.cmd+R:批量修改/替换
2.处理换行数据: f.read().splitlines()与 split('\n'):
splitlines() 忽略文件末尾换行符,兼容多类换行符;
split('\n') 严格按 \n 分割,会保留末尾换行符生成的空字符串;
使用场景:
读取文本文件并按行处理时,优先用 splitlines()(或直接用 for line in f: 遍历),更符合 “按行读取” 的直觉;
仅需严格按 \n 分割(比如处理特定格式的字符串)时,才用 split('\n');
3. eg: for number in range(start, end + 1):
s_num = str(number)
(1)是range(),不是[],不要和索引搞混了
(2)for i in range()后,i得到的是数字形式
(3)数字形式无法用len(),需要使用str(i)
(4)数字形式也不能用切片,需要转化为字符串再用,first_half = s_num[:mid]
4.eg: r = "5-20"
start, end = map(int, r.split('-'))
(1)语法:字符串.split(分隔符)————> 得到的是列表,['5','20'],但是列表中的元素仍是字符串形式,不是数字
(2)语法:map(函数, 可迭代对象):
第一个参数 int 是 “转换函数”(把字符串转整数的内置函数);
第二个参数 ['1', '10'] 是待处理的列表(可迭代对象);
map() 返回的是迭代器,需要用 list()/tuple() 等转换成具体的序列才能直接查看;
(3)便捷赋值:start, end = ... ————> 把可迭代对象的元素依次赋给多个变量
变量数量必须和可迭代对象的元素数量完全匹配(除非用 * 接收剩余元素,比如 a, *b = [1,2,3],a=1,b=[2,3]);
可迭代对象可以是列表、元组、字符串、map 迭代器、生成器等(只要能逐个取出元素)。