算是留条后路吧...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+out if s1 == '': return out+s2#PLACE A LINE OF CODE HERE if s2 == '': return out+s1#PLACE A LINE OF CODE HERE else: 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 test def 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君还是蛮灵活的,各种递归什么的不在话下。
21 replies on “从R到python散记(结束更新)”
可用 pandas 包操作文件和处理数据:http://pandas.pydata.org/pandas-docs/stable/io.html
最近也在从R到Python 略晕啊...
楼主用的什么参考书or教程?
edx最近有一门python的课...就照着葫芦自己练了一下。
就这个:MITx: 6.00.1x Introduction to Computer Science and Programming
3Q...这里也有一个,不过讲的太细。。。有点卡https://www.coursera.org/course/interactivepython
^_^ thanks 不过这东西也不是多多益善,有一门就够了,编程疲劳中。
是滴。。。讲的都睡着了
好久不见了 妹子 你又GET了新技能
欢迎常回来看看呀。是啊百无聊赖就去学了点新东西。
这是为什么...
会一门就够了
不够啊不够啊,没法生存了都。
汗。。搜r.py居然搜到你这来了.
这种奇异的事情经常发生的...哈哈哈。
哈哈,话说你用r.py么?翻墙不顺的情况下找不到什么资料..
这个是什么
python环境下用r的一个library. 有些情况下用python的环境api方便些。
听起来好高级...你搞定了跟大家分享一下?