2017-02-06 95 views
0

在這裏,我有一個更大的程序的一部分,我正在努力。該功能正在查看一些輸入電子郵件並按字母順序排列。有沒有一種方法可以讓它只查看@domain之前的部分?目前我認爲它正在查看整個輸入電子郵件字符串。閱讀字符串的一部分

def __lt__(self, other): 
    if (self.email < other.email): 
     return True 
    else: 
     return False 
+0

你有嘗試過什麼嗎?我會建議研究字符串拆分。 –

回答

3

是:

def __lt__(self, other): 
    return self.email[:self.email.index('@')] < other.email[:other.email.index('@')] 

給出總有email一個'@'

在這裏,我們切片工作:我們確定其中'@'符號放置.index('@')指數,我們用[:...]切片達(但不包括)的'@'標誌。所以:

>>> email='[email protected]' 
>>> email[:email.index('@')] 
'foo' 

然後我們簡單地計算是否「我們的」 '@'號前部分小於一部分的other'@'跡象。

+1

只是爲了我自己的知識,它會被普遍接受的編碼習慣使用像這樣的切片符號,而不是像'self.email.split('@')[0]'這樣的字符串分割嗎?他們應該在這種情況下產生相同的結果,但它們可能是一些特殊情況,其中一種方法比另一種我不知道的更好。 – tmwilson26

+2

@ tmwilson26:如果字符串沒有**不包含「@」,則分割將仍然有效,而分割將失敗。所以呀'分裂'可以更好。此外,由於您計算了所有拆分元素,而不僅僅是第一個(您實際上感興趣),所以拆分(可以)在計算上更加昂貴。 –

+1

瞭解了這一點,明確了利用切片的好處。 – tmwilson26