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

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

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

for i in forset:

而不是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

赋值的方式也很多样:

>>> a = dict(one=1, two=2, three=3)>>> b = {'one': 1, 'two': 2, 'three': 3}

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里面确实感觉很方便。

def helpLaceStrings(s1, s2, out):#print s1+s2+outif s1 == '':return out+s2#PLACE A LINE OF CODE HEREif s2 == '':return out+s1#PLACE A LINE OF CODE HEREelse:return helpLaceStrings(s1[1:],s2[1:],out+s1[:1]+s2[:1])

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

for i in range(min_len):lacestr = lacestr + s1[i]+s2[i]lacestr = lacestr+ s1[(i+1):]+s2[(i+1):]

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

12. 函数嵌套

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

def sqrt(a):    def tryit(x):        return 0.5 * (a/x + x)    return fixedPoint(tryit, 0.0001)

以及

def babylon(a):    def test(x):        return 0.5 * ((a / x) + x)    return testdef sqrt(a):    return fixedPoint(babylon(a), 0.0001)

————–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来实现正则表达式。

class WordTrigger(Trigger):    def __init__(self,word):        self.words = word.lower()    def  isWordIn(self,text):        import string         import re               splitted_word = re.split('\W+',text.lower())        return self.words in splitted_word

—————4.22更新——–

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

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

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

相关文章:

你感兴趣的文章:

标签云: