落园 » 从R到python散记(结束更新)|专注经济视角下的互联网

从R到python散记(结束更新)

算是留条后路吧...anyway学门新语言总比学门新的课程简单一些。

1. 循环
Python 君貌似不是很喜欢操纵下标(不是C),循环比较直接:

而不是for index in range(len(forset)): i=forset(index)

While和R的用法基本一直。也可以直接break跳出。

2. 集合操作
Python里面也有set类函数若干。最基本的就是变成set,比如
set([0,1])这样,就是0和1两个元素的集合。然后就是基本的集合操作:
差集:set_a-set_b,对应R里面的setdiff(set_a, set_b),(原生)R里面没有set这一类型,所以没法直接重新定义集合减法。
交集:set_a&set_b,对应R里面的intersect().
并集:set_a+set_b,对应R里面的union().
元素x属于set_a:x in set_a,对应R里面的操作符%in% (不写成函数形式)
判断空集:len(set_a)==0,对应R里面length(set_a)==0,貌似还有个is.empty()函数,忘了是R的还是matlab的了。

3. 字符串操作
从数字转到字符串:str(1),对应R里面as.character(1).唯一不同的是,R的函数可以直接应用到一个vector上,而python里面只能map()一下才可以。(向量化编程强迫症的孩子桑不起)
字符串操作也蛮好玩的,典型的面向对象风格。
字母计数:str_a='abcda'; str_a.count('a') #返回2
字符排序:一个字符串可以直接用list()打散,R里面就需要strsplit()函数了。然后str_list.sort()一下就可以了。注意该函数无返回值,也不需要再赋值给一个新的对象,自动替换原对象。
替换:str.replace() ,对应R里面gsub()
字符分割:str.split(),对应R的strsplit().

4. 基本的数学操作
好像这里和R或者matlab没什么特别大的区别...

5. 打印到屏幕
Python 2.7下print是个命令直接用,比如print 'a'+'b'这样,3.0之后就和R更像了,函数形式print('a'+'b'),等价于R的print(paste0("a","b"))或者cat("a","b")。

貌似也可以直接 print 'a', base, 'c' 这样

6. 文件操作
表示没有类似R的read.table()函数极为不爽...原始的,file.open(), file.readlines()各种吐血...好吧这一点其实和C更像,也更有效率(R也是封装了好几层,速度慢)。

7. List
这个就类似于R的vector这样,需要list()声明或者直接写进去[]里面。
增加元素:list.append(), 对应R的c()
移除元素:list.remove(), 对应R的 = NULL赋值

----------3.13更新------------

8. 键盘输入

raw_input("Enter a word ")

9. 字典 Dictionary

应该是python里面蛮有意思的数据结构,一共两列,第一列key第二列value

赋值的方式也很多样:

len(d)返回长度,d[key]返回对应值,del d[key]删除某个key,d.copy()复制该字典,d.get('a',0)返回value或者0,d.keys()或者d.values()返回所有的key或者values,d.update(a=1)增加或者覆盖原有key。

--------------3.22 更新---------------

10. 笛卡尔积

就是类似于R里面的grid.factor()用法,python里面好直接:

[ (a,b,c) for a in range(max_a) for b in range(max_b) for c in range(max_c)]

11. 循环调用

这种方法我貌似在R里面很少写,不过在python里面确实感觉很方便。

就是一个函数可以循环调用自己...呃。等价的循环写法是:

大神勿喷,小白慢慢体会python的神奇之中。

12. 函数嵌套

呃,这俩居然是等价的,python真是够fly...

以及

--------------3.29更新------------

13. list到字符串

小小的有点tricky,就是利用join()函数,"".join(return_text) 这样就好了。

14. dict增加新项目

其实就是update()函数...caesar_dict.update(new_dict)就好了。

15. 改变工作目录

基本就是等同于R的setwd(),python里面叫做os.chdir().

16. list中的index

虽然python君不喜欢index,但是还是离不开呀...所以要用到list.index()这样,比如返回最大值对应的index: values.index(max(value))

---------------4.14更新--------

研究了一下class...还有继承....好吧其实感觉我还是看得云里雾里。比较重要的就是往里面传参数...是__init__这样。然后可以自定义自己的function,还有导入re来实现正则表达式。

---------------4.22更新--------

其实一直在跟的是MITx: 6.00.1x Introduction to Computer Science and Programming这门课,edX平台上的。今天考完试了,大结局还不错,漏了两个problem sets不去做课堂作业,居然还有80%入账,哈哈哈。

2014-04-22 16_32_23-6.00.1x Progress _ edX

啦啦啦,就这样吧。终于搞懂了编程的“继承”概念,感觉python君还是蛮灵活的,各种递归什么的不在话下。


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *