1. 在test 文件夹下,有一个 test.py文件,这其中调用到了 commonroad_qp_planner文件夹里的一个模块(.py文件)。直接在test 文件下打开终端运行 python test.py,会报错。
解决:在test.py 中 补上
import sys
sys.path.append("..")
为了调用上一级目录下的模块。
2. Unittest 单元测试,是用来测试代码的结果是否正确的,参考https://zhuanlan.zhihu.com/p/55093566
简单来说,在一个以test开头的函数中,写入 [运行自己写的代码 得到result] 和 [一个expect_result]
self.assertEqual(result,expect_result), 看它是否会报错。
另外,执行
if __name__ == '__main__':
unittest.main() 会执行当前类中所有以test开头的方法来直接运行,而不必再专门对TestCalculator进行实例化。
3. 删除一个List中的重复元素,并保留本身的顺序 得到mylist: mylist = sorted(set(List), key=List.index)
4. 把一个List排序,可以用sort函数。可以设定key,来设定排序的顺序。当有多个key的时候,可以把 多个条件用[],来表示 :
5. Sort和sorted的区别就是: sort是在已有的list的上,进行排序操作,List_A.sort(), 原来的List_A就没有了。如果想保存List_A, 新建一个List_B来存排序后的list, 可以用sorted. List_B = sorted(List_A)
6. Python想调试第三方的包的源代码,但是在PyCharm里面debug模式下,进不去源码。这时候我们可以使用python自带的包
import pdb # 在源文件中导入这个包
pdb.set_trace() # 在源文件你想要的地方加上这一句。保存。
在你run或者debug时,程序会停在这里,这时候,你可以在console里面查看各个变量的大小。
用下面的命令,来单步执行
命令 | 作用 |
---|---|
c | continue执行程序,遇到下一个pdb.set_trace(),依然会停 |
n | 执行next行 |
r | 执行函数,从当前函数返回 |
s | 进入函数 |
7. python中也有类似C++中的三目运算
max = a if a>b else b # max取a和b中的较大的值
8. 字典A和字典B
并集:A.items() | B.items()
A中存在B中不存在的: A.items() - B.items()
9. list.reverse()没有返回值,会直接反转list,从而改变原list,并且只能对list使用。
reversed(seq)有返回值,不会改变原seq,可以对list、dict、str等序列使用。
反转和排序不一样,比如34521反转后时12543,而排序(正向)后为12345
10. 想要在一个长的字符串中筛选出来某个模式的 字符段, e.g. V357529_20220512 这样有模式的片段。可以用正则表达式
import re
pattern = 'V[\d]{6}_[\d]{8}'
re.search(pattern, string, flags=0)
这样可以搜索到所有 满足这个模式的字符片段,.regs就可以找到它们的起始index.((start1, end1), (start2, end2))
关于 正则表达式 的写法,这个网页可以测试 pattern: regex101: build, test, and debug regex
一下时一些简单的examples:
[\d]{6} | 表示V后面跟着 6 个数字的模式。 |
[\s]{8} | 可以用来表示 8个 whitespace |
[.]{24} | 表示24个任意字母数字(除换行符\n外 |
[A-Z0-9]{6,10} | 表示大写字母和数字的组合,可以是6至10位 |
11. 将两维列表转化为一维列表
matrix = [[1,5,9],[10,11,13],[12,13,15]]
sum(matrix, [])
[1, 5, 9, 10, 11, 13, 12, 13, 15]