0、str這個class,很常用,也經常可以看到兩個字串,進行is或者==的比較
is 和 ==
a、is表示對比的是物件識別符號(即記憶體位址),用來檢查物件的識別符號是否一致,即兩個物件在記憶體中的位址是否一致(物件首位元組的記憶體位址(你經常看到到的位址要麼是十六進製制展示的,要麼就是十進位制的))
b、在使用 stra is strb 的時候,相當於id(stra)==id(strb),因為字串是不可變物件,所以又有字串池的概念,所以is對比如果返回true,那麼==也一定會返回true
1、==表示兩個物件的值是否相等,相當於呼叫了__eq__()這個魔法方法,即stra == strb 相當於 stra.__eq__(strb)
str重寫了__eq__方法
2、這次的話,我們再多介紹乙個魔法方法__cmp__(乙個python3.x下已經遺棄的寶貝)
__cmp__
a、int、str 等內建資料型別排序時,python的 sorted() 按照預設的比較函式 __cmp__的返回值進行排序(int、str也重寫了__cmp__(python2.x下)
b、int、str現在已經廢棄了__cmp__這個魔法(python3.x下)),廢棄了__cmp__方法後,則新定義了 __eq__, __ne__, __lt__, __gt__ 等各種新的魔法方法
但是這個python2.x下的知識點也要知道……,以下語法為python2.x
但是,如果對一組 person 類的例項物件需要排序時,就必須提供我們自己的特殊方法 __cmp__():
class person(object):
def __init__(self, name, age):
self.name = name(
self.age = age
def __str__(self):
return '(%s: %s)' % (self.name, self.age)
__repr__ = __str__
def __cmp__(self, other):
if self.name < other.name:
return -1
elif self.name > other.name:
return 1
else:
return 0
上述 student 類實現了__cmp__()方法,__cmp__用例項自身self和傳入的例項 other 進行比較,如果 self 小於其他物件 ,就返回 -1,如果 s 大於其他物件,就返回1,如果兩個物件相等,就返回 0。
這邊為了加強理解,假設換成數字就更能明白-1、1、0的用意了,你想想看呢?
person類實現了按name進行排序:
>>> l = [person('tim', 25), person('bob', 30), person('alice', 23)]
>>> print sorted(l)
[(alice: 23), (bob: 30), (tim: 25)]
對於比較的字串,按照字元的ascii碼進行比較,顯然是按照第一位字元的ascii碼進行的比較
注意: 如果list中的元素不僅僅包含 person 類的物件,則 __cmp__ 會報錯:
l = [person('tim', 25), student('bob', 30, 100, 'hello']
---------------------
linq to entity之字串比較
剛做到這塊,有涉及到字串比較問題。linq to entity 是不支援像sql語句中的兩個字串的比較的 比如sql select from aaa where aa.name a001 and aa.name b001 遇到這個情況如何處理呢 在寫linq的時候 開始的想法就這樣 using xt...
Python日期字串比較
需要用python的指令碼來快速檢測乙個檔案內的二個時間日期字串的大小,其實實現很簡單,首先一些基礎的日期格式化知識如下 a星期的簡寫。如 星期三為web a星期的全寫。如 星期三為wednesday b月份的簡寫。如4月份為apr b月份的全寫。如4月份為april c 日期時間的字串表示。如 0...
亂序字串比較 python
亂序字串是指乙個字串只是另乙個字串的重新排列。例如,heart 和 earth 就是亂序字串。下面的方法是比較連個字串是不是亂序字串,下面應該是演算法複雜度比較小的的了。其他的先排序,然後比較。應該算比較容易想到。但是複雜度會提高。def compilestr a,b s1 0 26 s2 0 26...