python与C,在写程序时踩过的坑!
1. python与C有很多相似之处, 其一就是指针的大量应用, 因此在使用临时变量保存数据, 并将临时变量传递给其他变量时需要创建内存;
例如,在C中, char *temp 每次获取到不同的字符串, 依次放入 char **list中, 先申请一块内存 char *f = malloc(sizeof(char)*10); f=temp; *list = f; 这样temp在改变时, 就不会影响到list; 下一个 *(list+1)=..
python中使用复制申请内存, save_temp = temp.copy(), 但是在向list集合中存储时, 不需要手动创建内存, 会自动创建;
2. 一个列表中, 循环删除预定位置的元素, 在使用双重for时会造成指针移位, 因此可使用先复制list, 遍历复制的list, for i in copy_list: 然后在需要删除的列表 remove(i), 使用复制列表固定指针;
另一种做法是: while(len(temp_list)>0): i = list[0] list.remove(i), 使用常量0 固定指针;
3. C中读取每行数据:
先在函数参数中定义字符串指针 存储行数据 read_line(File *fp, char *word),当然在函数内定义数组也可以但是相比比较耗内存, 然后为每个位置赋值;
*word = '\0';
char var = fgetc(fp);
while(var != EOF && var != '\n'){
*(word++) = var; //为当前位置赋值
*word = '\0' //为下一个位置赋值, 避免无法读取内存
var = fgetc(fp);
}
4. C中对每行数据, 按符号进行切分, 例如每行数据按 ;切割
split_seq(char *line,char **f):
char temp[30]; //存储临时数据
size_t i; //记录字符地址长度
char *copy; //创建新空间
while(strlen(line)>0){
char *p = strchr(line, ';'); //找到分隔符位置
size_t sub_len = strlen(line) - strlen(p); //计算需要切割的长度
for(int i=0; i<sub_len; i++){
temp[i] = line[i];
}
temp[i] = '\0'; //将数据填充进temp
copy = malloc(sizeof(char)*10); //创建内存,固化数据
strcpy(copy, temp);
*f = copy;
line = p+1; //移动line的指针
if (*line == '|') break;
f = f+1; //如果不是结尾, 则增加指针;
memset(temp, 0, sizeof(temp)); //相当于clear 数组;
}
5. C中找到目标key值:
int targe_len = strlen(targe);
bool flag = false;
{
char *p = strchr(line, targe[0]); //找到目标字符串的开头位置, *p 是在line的地址
if (!p) return flag;
int i;
for (i = 0; i < targe_len; i++) {
temp[i] = p[i];
//*(temp + i) = *(p + 1);
}
flag = strcmp(temp, targe); //是否能找到目标字符串, key值, 在这里判断的原因在于 加上'\0'后, 就无法判断字符串相等;
temp[i] = '\0';
6. python字典的一些用法: 初始化字典的一个技巧-> indict_init = lammda:{'conv_w':None, 'conv_b':None} conv_bn = indict_init()即可完成初始化 conv_bn[...]赋值
判断字典中是否有该key, if conv_bn.get(...), 判断value是否为空 if conv_bn[...] is None,
对字典排序 sorted(dict.keys()) 或者 sorted(dict.items())
7. 将矩阵展开为一维集合 [ i for line in matrix for i in line ] , 对矩阵各列排序 sorted(param_matrix, key=lambda params:[params[3],params[1]],reverse=True),
将map的用法: min([i[0] for i in list(map(lambda x: (x[1],x[3]), params)) if i[1]<height])
将多个list组成一个矩阵 np.c_[all_index, length, width, height, priority, price]
8. 使用pandas做文本操作: data_set = pd.read_excel(path)
# 清洗尺寸中的空值项
null_num = data_set['尺寸'].isnull().value_counts() data_set['尺寸'].apply(lambda x: np.NAN(x) if str(x).isspace() else x)
data_set['尺寸'].fillna(143)
null_index = data_set[(data_set['尺寸'] == 143)].index.tolist()
data_set = data_set.drop(null_index, axis=0) # 拆分尺寸
loc = data_set['尺寸']
loc = loc.tolist()
python与C,在写程序时踩过的坑!的更多相关文章
- STM32用JLINK 烧写程序时出现NO Cortex-m device found in JTAG chain现象和解决方案
现象 CPU: STM32107VC 用JLINK 烧写程序时出现NO Cortex-m device found in JTAG chain 如图无法查找到硬件就是CPU 提示1:NO Cortex ...
- object-c cocos2d-x 写程序时注意调试的技巧
(1)写程序时最好在类的init函数中显示类名,表明现在在执行哪个类,样例代码 CCLOG(@"cocos2d: Using Director Type:%@", [self cl ...
- 小程序——微信小程序初学踩过的坑
微信小程序初学踩过的坑 一.前言 最近因为某些需要和个人兴趣打算开发一下微信小程序,经过在官方网站上的基本了解,我大体知道了微信小程序开发的大致过程,其实最本质的就是MVVM,借用了很多模式上 ...
- [问题解决]RedHat7更换CentOS7的yum源时踩过的坑
更换yum源的流程 查看当前yum程序 $ rpm -qa|grep yum 这里推荐将其结果截屏或拷贝出来,以免后面报错修复. 删除原有yum源 $ rpm -aq | grep yum|xargs ...
- 使用Ajax中get请求发送Token时踩的那些坑
在使用惯了各种牛X的插件以后,在使用原生组件写一些小东西的时候总是有踩不完的坑! 今天就来说一说我使用原生ajax请求时踩得坑: 下面是我的代码: var xmlhttp; if (window.XM ...
- Python 官方团队在打包项目中踩过的坑
花下猫语:这是 packaging 系列的第三篇译文,该系列是全网关于此话题的最详尽(水平也很高)的一个系列.原作者是 Python 官方打包团队成员,是 virtualenv 和 tox 项目的维护 ...
- 研究slatstack时踩过的坑,注意点及解决方案
运行问题 1.直接物理性移除minion或者更换minion原先连接的master,会导致先前的master始终无法ping通minion [root@localhost salt]# salt '* ...
- 记录一下自己写PHP程序时走过的一些坑
写在前面: 喔噢,转眼间发现自己正式开发程序(PHP)已经有快有1个月了,一路上走了许多的坑,有时遇到坑的时候真想放弃,但是还是坚持下来了!所以写了这篇文章来帮助那些刚刚接触PHP的小白们.[: )] ...
- 写程序时try,catch查看报错的行号
try { //////////////// 代码段 //////////////// }catch(Exception ex) { MessageBox.Show(ex.St ...
随机推荐
- Mybatis报错 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'parentCode' not found. Available parameters are [0, 1, param1, param2]
orcal数据库使用mybatis接收参数,如果传的是多个参数,需要使用#{0},#{1},...等代替具体参数名,0 代表第一个参数,1 代表第二个参数,以此类推. 错误语句: <select ...
- Java多线程(三)如何创建线程
点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...
- 《Java大学教程》—第4章 方法的实现
4.2~3 声明.实现.调用4.4 数据传递:实参.形参.返回值4.6 变量作用域:局部变量(区域内访问).全局变量4.7 重载:运算符重载.方法重载-->多态 1.答:P67方法(method ...
- ORM版学员管理系统3
老师信息管理 思考 三种方式创建多对多外键方式及其优缺点. 通过外键创建 class Class(models.Model): id = models.AutoField(primary_key=Tr ...
- 【Teradata】tdlocaledef修改默认日期配置
如下所有操作需要使用root登录到TD数据库节点操作 1.获取数据库当前默认配置 //使用root登录TD数据库节点 cd /opt/teradata/tdat/tdbms/xx.xx.xx.xx/b ...
- MySQL高级知识(五)——索引分析
前言:前面已经学习了explain(执行计划)的相关知识,这里利用explain对索引进行优化分析. 0.准备 首先创建三张表:tb_emp(职工表).tb_dept(部门表)和tb_desc(描述表 ...
- WPF模板(一)详细介绍
本次随笔来源于电子书,人家的讲解很好,我就不画蛇添足了. 图形用户界面应用程序较之控制台界面应用程序最大的好处就是界面友好.数据显示直观.CUI程序中数据只能以文本的形式线性显示,GUI程序则允许数据 ...
- linux学习笔记整理(三)
第四章 文件的基本管理和XFS文件系统备份恢复本节所讲内容:4.1 Linux系统目录结构和相对/绝对路径.4.2 创建/复制/删除文件,rm -rf / 意外事故4.3 查看文件内容的命令4.4 实 ...
- 在ASP.NET MVC中使用Redis
一.Redis基本认知 1.含义: REmote DIctionary Server(Redis) | 是一个key-value存储系统 2.特性: 2.1 持久化:可以将内存中的数据保存在磁盘中,重 ...
- [ZJOI2012]网络
嘟嘟嘟 今天复习lct,趁着还年轻多写点数据结构. 首先不得不吐槽一下,题面好长啊-- 通过观察发现,\(c \leqslant 10\).那么就可以暴力的建10棵lct. 接下来说下具体做法: 1. ...