2009年4月12日 星期日

2009/4/10 強哥密技吱吱叫

list 介紹:
a = [1,2,3,4]
#a[0]是1,a[1]是2,即第一位為0

a.append(5) #將5加入list(a)尾端->[1,2,3,4,5]
len(a) #傳回a的數量,即 5

*如何將list中的值移除:
b =[1,2,4,2,5,1,5,3]
想移除其中的2
能使用b.pop(1)
or b.remove(2)
但這remove只能移除第一個2,並且兩者都使位置向前推進
所以想使兩個2都移除的話,如果使用:
for i in range(8):
if b[i] = 2:
b.pop(i) #這種方法是錯的,因為當第一個2被移除,其順序向前,將使得下一位數被跳過,
也使得,其後的a[x]錯位,找不到。
可利用從後方刪除:
for i in xrange(8):
j = 8 - i - 1
if b[j] = 2:
b.pop[j]#無向前推擠的疑慮(此法出自"小強學長必殺技!")

ditionary 介紹:
dit={'a':3,'b':4,'c':'k'}
可以如字典般查詢

dit['d']=7 #將'd':7加入dit內


sys介紹:
例如阿蒙學長使用ubutu(os:這........)
而我們使用windows
在路徑使用上差異很大,
如果直接寫入絕對路徑,在不同作業系統上會產生錯誤
所以使用sys來配合

re介紹:
正規表示式

split切割:
如果當有一字串'a>b'
當我想個別抓出a,b,c,d時,可使用split
>>> d='a>b'
>>> d.split('>')
['a', 'b']


程式邏輯:
Ex1:
a=3
a=b
b=5
a=?#答案仍然是3

Ex2:
a=[1,2]
b=a
b[0]=3
a=?#答案卻是[3,2]

差別為Ex1為數字 Ex2則為物件
物件相等則會使兩者相互變動
為了避免此種邏輯的影響,可利用copy模組:
from copy import *
a=[1,2]
b=copy(a)
b[0]=3#a還是[1,2]

又假設:
from copy import *
a=[1,2,[1,2]]
b=copy(a)
b[2][1]=3#a變成[1, 2, [1, 3]],因為a[2]仍為物件
可利用
deepcopy將此問題解決

2 則留言:

  1. Python 語言的編排是非常重要的,你研究一下如何在 blogger 中秀出好看的 Python 程式。如: http://hoamon.blogspot.com/2009/03/return-httpresponseredirect-by-post.html

    回覆刪除
  2. > 程式邏輯:
    > Ex1:
    > a=3
    > a=b
    > b=5
    > a=?#答案仍然是3
    >
    > Ex2:
    > a=[1,2]
    > b=a
    > b[0]=3
    > a=?#答案卻是[3,2]
    >
    > 差別為Ex1為數字 Ex2則為物件
    > 物件相等則會使兩者相互變動
    > 為了解決這問題,可利用copy模組:
    > ...
    這不是一個問題,這是 Python 語言的特性。它就是要這麼規範的。這不是缺點。詳情請看

    http://hoamon.blogspot.com/search?q=python+%E5%8F%AF%E8%AE%8A%E7%89%A9%E4%BB%B6

    回覆刪除