(A ((B (C D)) (E F)))根據括號的順序以產生下面的結果
(C D) (B (C D)) (E F) ((B (C D)) (E F)) (A ((B (C D)) (E F)))該怎麼做呢?
人不是因為衰老才停止跑步,而是因為停止跑步才衰老 - Jack Kirk
(A ((B (C D)) (E F)))根據括號的順序以產生下面的結果
(C D) (B (C D)) (E F) ((B (C D)) (E F)) (A ((B (C D)) (E F)))該怎麼做呢?
3月25日是學校校慶,我參加了 3000 公尺的比賽, 今年比賽日期是到3月初才公布, 害我只有3個禮拜的時間可以準備, 平常都是練 8-10 km 順順的跑,沒有特意加強速度, 為了參加比賽,我還練了間歇跑提升速度。 根據練習的數據來看,我最快可以跑到 11 分 30 秒。 去年一直在受傷的陰影中,沒辦法參加比賽,直到今年初才完全復原, 再加上又老了一歲,我想應該沒法在這一次比賽中突破之前的記錄。
a.vcproj -> a.vc9.vcproj b.vcproj -> b.vc9.vcproj a.vcproj -> c.vc9.vcproj其實只要用 bash 寫一個 for 迴圈就解決了
data = [2, 3, 4, 5, 1] data.sort()上述程式碼會將 data 的元素由小到大排序, 因為 sort() 是直接排序 data 的元素,而不是排序複製 data 的元素, 所以傳回值是 None 以避免困擾,如果要將排序過的資料傳給另一個序列要使用 sorted(),如
sorted_data = sorted(data)假設現在 data 改成如下
data = [(11, 5, 1000), (13, 4, 10),
(17, 6, 100), (19, 5, 1) ]
想要以 tuple 的第二、三、一個元素的大小做排序,該怎麼做?
在 jserv 的部落格看見一個好玩的測驗 What color is your rainbow?。 彩虹的顏色是紅橙黃綠藍靛紫,
但是每個人看事情的角度不同, 這個測驗會依據你的人格特質做出一個獨特的彩虹。 測驗的題目都是二選一,挑出使你快樂或者愉快的答案, 如果不確定要選那一個,可以跳過, 題目不多,很快就可以做完了,有興趣的人可以試試看 :P
d = dict(a=1, b=2, c=3)
d = {'a': 1, 'b': 2, 'c': 3}
第一種做法不用打括號,打字會稍微快一點,
如果要用兩個 list 分別當作 dictionary 的 keys 跟 values,
可以利用
zip()
這個函式,例如
names = ['a', 'b', 'c'] counts = [1, 2, 3] d = dict(zip(names, counts))
items = [1,2,3,4,5]
result = []
for i in items:
result.append(i*i)
map 提供了另一種方法
def square(x):
return x*x
result = map(square, items)
map 的第一個參數是函式,第二個參數是序列,
而傳回值則是將輸入的函式套用到輸入序列的每一項元素所形成的新序列。
其實還可以寫得更短
result = map(lambda x: x*x, items)上面例子中的 lambda x: x*x 定義了一個無名函式,效果就如同前面定義的 square()。
The Big Picture 是 boston.com 下的一個 photo blog,意在提供高品質令人驚豔的影像包含了當前的事件, 少為人知的故事,還有任何有趣的事情。 底下列出讓我印象深刻的系列:
for key in d:
print key
其中 d 的型態可以是 list, tuple, set, string, dictionary 等。
要檢查一個字串是否含有某子字串,通常會想到下面的做法
sentence = "fly me to the moon"
if sentence.find("fly") != -1:
print "successful"
其實更好的方法是用 in
if "fly" in sentence:
print "successful"
是不是更好閱讀,打字也更快呢?
items = ['red', 'blue', 'green', 'yellow']
result = ''
for s in items:
result += s
Python 提供了一個更有效率的解法
result = ''.join(items)如果字串中間要用逗號跟空白做分隔時,只要改成
result = ', '.join(items)單括號內的字串就是隔開 items 元素的分隔物, 所以如果單括號內是空的,就表示沒有分隔物。 底下介紹上述技巧的應用
numbers = [1,2,3,4,5,6]
squares = []
for n in numbers:
if n % 2 == 0:
squares.append(n*n)
上述程式碼將 numbers 中是偶數的元素平方之後加到 squares。利用
list comprehensions
只要一行程式碼就可以完成目的。
squares = [n*n for n in numbers if n % 2 == 0]請注意程式的可讀性是不是並沒有因為程式碼的縮短而減少呢? 其實 list comprehensions 中可以有很多個 for 跟 很多個 if, 不過使用時要斟酌一下,如果真的有很多個 for 跟 if, 最好考慮使用一般的寫法,不然程式就會變得不易閱讀。
for item in items:
print item
但如果要同時把 item 的 index 也印出來,該怎麼做?
tmp = a; a = b; b = tmp;而在 Python 中只要一行就可以解決了
a, b = b, a
相信很多人都會使用 Google Docs 來撰寫文件吧, 我則是拿它當作文件備份的工具,平常我會將一些想要記錄的事寫成純文字檔, 比如記錄機車加油的里程數,英文單字,還有買了那些東西,假設這三個檔案分別叫做 bike.txt, vocabulary.txt, buy.txt, 因為懶得登入找到文件再找到上傳的按鈕,我想要使用下面的命令列就好了:
google_docs bike.txt vocabulary.txt buy.txt
續之前產生 排列組合 的問題,無意間又發現了一個新的解法,先回顧問題一下, 如何產生下面的序列?
0000 1000 0100 1100 0010 1010 0110 1110 0001 1001 0101 1101 0011 1011 0111 1111
Terence Tao 跟 Peter Woit 不約而同地介紹了 The Princeton Companion to Mathematics, 這本書是一本數學參考書,主要是寫給對數學有興趣的人, 包含了兩百多個項目,分別由世界上項尖的數學家所撰寫, 介紹了基本的數學工具及字彙;追溯當代數學的發展; 解釋基本名詞及概念;檢視數學主要分支的核心概念; 描述有名數學家的成就;檢視數學對其它領域的影響如生物、經濟、音樂等。
令人高興的是 書中的某些文章 可直接下載觀看, 最令我感興趣的是 Advice to a Young Mathematican 這一段,當中5位數學家描述了他們做研究的方式,其中的心路歷程, 還有從幫助學生變成研究者所得到的心得。 第一位英國數學家 Michael Atiyah,他拿過 1966 年的 Fields Medal, 還有 2004 年的 Abel Prize。 底下摘錄幾句讓我引起共鳴的話,並附上翻釋, 有錯請不吝指正。